PHP学習ノート(六):類と対象


PHP 5からオブジェクトモデルを完全に書き換えた.PHP 5の新しい特性には、アクセス制御、抽象クラス、finalクラスメソッド、追加のマジックメソッド、インタフェース、オブジェクトコピー、およびタイプ制約が含まれます.基本概念class各クラスの定義はキーワードclassで始まり、後にクラス名、後にカッコのペアが付いており、クラスの属性と方法の定義が含まれています.クラスには、独自の定数、変数(プロパティ)、および関数(メソッド)を含めることができます.例:
class SimpleClass {
     // property declaration
     public  $var  =  'a default value' ;

     // method declaration
     public function displayVar () {
        echo  $this -> var ;
    }
}

メソッドがクラス定義の内部で呼び出されると、使用可能な擬似変数thisがあります.これは、プライマリコールオブジェクトへの参照です.newクラスのインスタンスを作成するには、newキーワードを使用する必要があります.クラス内でnew selfとnew parentを使用して新しいオブジェクトを作成できます.extendsクラスは、宣言でextendsキーワードで別のクラスのメソッドと属性を継承できます.PHPは多重継承をサポートしておらず、1つのクラスは1つのベースクラスしか継承できません.継承されたメソッドとプロパティは、同じ名前で上書きされることを再宣言できます.ただし、親定義メソッドでfinalが使用されている場合は、このメソッドは上書きできません.parent::を使用して、上書きされたメソッドまたはプロパティにアクセスできます.メソッドを上書きする場合は、パラメータを一致させないとエラーが発生します.コンストラクション関数を除き、コンストラクション関数は上書き時に異なるパラメータを使用できます.:classキーワードclassはクラス名の解析にも用いることができる.
属性属性宣言は、キーワードpublic、protected、privateから始まります.クラスのメンバーメソッドでは、->(オブジェクト演算子)で非静的属性にアクセスできます.静的プロパティは、:(二重コロン)でアクセスします.クラス定数
クラス定義の自動ロード_Autoload()関数は、未定義のクラスを使用しようとすると自動的に呼び出されます.
function __autoload ( $class_name ) {
    require_once  $class_name  .  '.php' ;
}

 $obj   = new  MyClass1 ();
 $obj2  = new  MyClass2 ();

コンストラクション関数と解析関数コンストラクション関数void_construct([mixed args[,...]]))コンストラクション関数を持つクラスは、新しいオブジェクトを作成するたびにこのメソッドを呼び出すので、オブジェクトを適用する前に初期化作業を行うのに適しています.Note:子クラスにコンストラクション関数が定義されている場合、親クラスのコンストラクション関数は暗黙的に呼び出されません.親クラスのコンストラクション関数を実行するには、サブクラスでparent:_を呼び出す必要があります.construct().子クラスにコンストラクション関数が定義されていない場合は、親クラスから継承されます.解析関数void_destruct(void)構造関数は、オブジェクトのすべての参照が削除されたり、オブジェクトが明示的に破棄されたりしたときに実行されます.アクセス制御(可視性)publicは、公有クラスメンバーがどこでもアクセスできるように定義されています.protectedは、保護されたクラスメンバーとして定義され、その子クラスおよび親クラスにアクセスできます.privateは、プライベートとして定義されたクラスメンバーは、定義されたクラスのみにアクセスできます.オブジェクトの継承
範囲解析オペレータ(:)範囲解析オペレータは、静的メンバー、クラス定数、クラス内の属性およびメソッドを上書きするために使用されます.これらのアイテムをクラス外で参照する場合は、クラス名を使用します.self、parent、staticの3つの特殊なキーワードは、クラスの定義の内部で属性またはメソッドにアクセスするために使用されます.Static(静的)キーワード宣言クラス属性またはメソッドが静的であれば、クラスをインスタンス化せずに直接アクセスできます.静的プロパティは、クラスがインスタンス化されたオブジェクトからアクセスできません(静的メソッドは可能です).擬似変数$thisは静的メソッドでは使用できません.静的プロパティは、->オペレータを使用してオブジェクトにアクセスできません.抽象クラス
オブジェクトインタフェースインタフェースはinterfaceキーワードによって定義され、標準的なクラスを定義するように定義されますが、すべての方法は空です.インタフェースで定義されているすべての方法は共通でなければなりません.これはインタフェースの特性です.実装(implements)Traits TraitsはPHPのような単一継承言語のために準備されたコード多重化メカニズムである.筆者もあまり理解していないので、後で詳しく説明します.リロードリロード(overloading)とは、クラス属性とメソッドを動的に「作成」することです.すべてのリロードメソッドはpublicとして宣言する必要があります.属性の再ロード
メソッドの再ロード
オブジェクトforeach IteratorインタフェースIteratorAggregateインタフェースを巡るマジックメソッド_construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state()と_クローン()などの方法はPHPでは「マジックメソッド」(Magic methods)と呼ばれている.マジック機能を使用しない限り、独自のクラスメソッドに名前を付けるときは使用できません.Finalキーワード
オブジェクトレプリケーションオブジェクトレプリケーションはcloneキーワードで実行できます.オブジェクト比較比較比較比較演算子(==)を使用して2つのオブジェクト変数を比較する場合、比較の原則は、2つのオブジェクトの属性と属性値が等しく、2つのオブジェクトが同じクラスのインスタンスである場合、2つのオブジェクト変数が等しいことです.一方、全等化演算子(===)を使用する場合、この2つのオブジェクト変数は、クラスの同じインスタンス(つまり同じオブジェクト)を指す必要があります.タイプコンストレイント
ポストスタティックバインド
オブジェクトと参照
オブジェクトシーケンス化すべてのphp内の値は、関数serialize()を使用してバイトストリームを含む文字列を返して表すことができます.unserialize()関数は、文字列をphpの元の値に戻すことができます.オブジェクトをシーケンス化すると、オブジェクトのすべての変数が保存されますが、オブジェクトのメソッドは保存されず、クラスの名前のみが保存されます.
<?php // classa.inc: class A { public $one = 1 ; public function show_one () { echo $this -> one ; } } // page1.php: include( "classa.inc" ); $a = new A ; $s = serialize ( $a ); //    $s        page2.php     file_put_contents ( 'store' , $s ); // page2.php: //         ,           include( "classa.inc" ); $s = file_get_contents ( 'store' ); $a = unserialize ( $s ); //         $a      show_one() $a -> show_one (); ?>