3.5. インスタンス化する方法オブジェクト 上で述べたように、PHP オブジェクト指向プログラムの単位はオブジェクトですが、オブジェクトはクラスによってインスタンス化されます。クラスが宣言されるので、次のステップはオブジェクトをインスタンス化することです。クラスを定義した後、new キーワードを使用してオブジェクトを生成します。 $オブジェクト名 = 新しいクラス名(); オブジェクト->プロパティ$p1->名前$p2->年齢; オブジェクト->メソッド $p1->say(); $p2->run(); 5.7. 特別な参照「$this」の使用 これで、オブジェクト内のメンバーにアクセスする方法がわかりました。これは、「Object->Member」メソッドを通じてアクセスされます。では、オブジェクト内のメソッドがオブジェクト内のこのオブジェクトのプロパティにアクセスできるようにしたい場合、またはオブジェクト内のメソッドがこのオブジェクトの他のメソッドを呼び出せるようにしたい場合は、どうすればよいでしょうか。オブジェクト内のすべてのメンバーは、オブジェクトの内部メンバー間の呼び出しを含め、オブジェクトを使用して呼び出される必要があるため、PHP はこのオブジェクトへの参照 $this を提供し、各オブジェクトにはこのオブジェクトへの参照が含まれます。 this の本来の意味は「this」です。上の例では、オブジェクトを表す 3 つのインスタンス オブジェクト $P1、$P2、および $P3 が存在します。 $p1、$p2、$p3。
8.構築方法と破壊方法 ほとんどのクラスには、コンストラクターと呼ばれる特別なメソッドがあります。オブジェクトが作成されると、自動的にコンストラクターが呼び出されます。つまり、 new キーワードを使用してオブジェクトをインスタンス化すると、コンストラクターが自動的に呼び出されます。 コンストラクターの宣言は、名前が __construct() でなければならないことを除いて、他の操作の宣言と同じです。これは PHP5 での変更です。以前のバージョンでは、コンストラクターの名前はクラス名と同じである必要がありました。これは PHP5 でも引き続き使用できますが、この利点は、コンストラクターをクラス名と同じにすることができることです。クラス名に関係なく、クラス名が変更された場合でも、対応するコンストラクター名を変更する必要はありません。下位互換性のために、クラスに __construct() という名前のメソッドがない場合、PHP はクラス名と同じ名前で php4 で記述されたコンストラクター メソッドを検索します。 形式: function __construct ([パラメータ]) { ... ... } クラス内で宣言できるコンストラクターは 1 つだけですが、コンストラクターはオブジェクトが作成されるたびに 1 回しか呼び出されないため、このメソッドはアクティブに呼び出すことができないため、通常はいくつかの便利な初期化タスクを実行するために使用されます。たとえば、オブジェクトの作成時に、対応するプロパティに初期値が割り当てられます。
コンストラクターの反対はデストラクターです。デストラクタは、PHP5 で新しく追加された内容です。PHP4 にはデストラクタはありません。デストラクターを使用すると、クラスを破棄する前に、ファイルを閉じる、結果セットを解放するなど、一部の操作を実行したり、一部の機能を完了したりできます。デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに削除されます。オブジェクトがメモリ内で破棄されるときに実行されます。つまり、デストラクタは、オブジェクトがメモリ内で破棄される前に呼び出されます。コンストラクターの名前と同様に、クラスのデストラクターの名前は __destruct() でなければなりません。デストラクターはパラメータを取ることができません。 形式: function __destruct ( ) { ... ... }
クラスの外にインターフェイスを提供する場合、クラスの外にプライベート属性の設定メソッドと取得メソッドを提供して、プライベート属性を操作できます。例: prvate $age;
もちろん、同じメソッドを使用して各属性の値を割り当てたり取得したりすることもできます。授業の外で操作を完了します。 JAVABEANも同じです! ! ! 10. __set() __get() __isset() __unset() の 4 つのメソッドの適用 一般的に言えば、クラス属性は常にプライベートとして定義され、これはより現実的なロジックに沿っています。ただし、属性の読み取りと代入の操作は非常に頻繁に行われるため、PHP5 では、属性を取得して代入するための「__get()」と「__set()」、および属性を確認するための「__isset()」という 2 つの関数があらかじめ定義されています。属性を削除するメソッド「__unset()」。 前のセクションでは、各属性の設定および取得メソッドを説明しました。PHP5 には、属性の値を設定および取得するための特別なメソッド「__set()」および「__get()」メソッドが用意されています。これらの 2 つのメソッドは存在しません。デフォルトでは、これらのメソッドは、コンストラクター メソッド (__construct()) と同様に、クラスに追加された場合にのみ存在します。もちろん、次の方法で追加できます。個人のスタイルに応じて追加することもできます。
__get() メソッド: このメソッドはプライベート メンバー属性値を取得するために使用されます。パラメーターは取得したいメンバー属性の名前で渡され、取得された属性値が返されます。このメソッドは、プライベート プロパティが直接取得されるときにオブジェクトによって自動的に呼び出されるプライベート メソッドにすることもできるため、手動で呼び出す必要はありません。 private プロパティはカプセル化されているため、値を直接取得することはできません (例: "echo $p1->name" で直接取得するのは誤りです) が、このメソッドをクラスに追加する場合は、"echo $p1->" を使用してください。 name". $p1->name" このようなステートメントが値を直接取得すると、自動的に __get($property_name) メソッドが呼び出され、プロパティ名がパラメータ $property_name に渡され、このメソッドの内部実行を通じて、渡したプライベートプロパティの値が返されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。 __set() メソッド: このメソッドは、プライベート メンバー属性の値を設定するために使用されます。最初のパラメーターは、値を設定する属性の名前です。属性に設定された値はありません。このメソッドは手動で呼び出す必要はなく、プライベート属性値を直接設定するときに自動的に呼び出されます。__set() メソッドが存在しない場合は、このメソッドは呼び出されません。例: $this->name='zhangsan' の場合はエラーになりますが、クラスに __set($property_name, $value) メソッドを追加すると、プライベート プロパティに値を直接代入するときに、が自動的に呼び出され、name などの属性を $property_name に渡し、代入する値 "zhangsan" を $value に渡します。このメソッドの実行により、代入の目的は達成されます。メンバーのプロパティがプライベートとしてカプセル化されていない場合、オブジェクト自体はこのメソッドを自動的に呼び出しません。不正な値を渡さないように、このメソッドで判定することもできます。
|