ホームページ >バックエンド開発 >PHPチュートリアル >PHP クラスの Magic Method の簡潔な概要、magicmethod_PHP チュートリアル
1. __construct() と __destruct()
インスタンスが作成/破棄されるときに呼び出され、0 個以上のパラメーターを渡すことができます。
注: デストラクター メソッドは、特定のオブジェクトへの参照が他になくなるとすぐに、またはシャットダウン シーケンス中に任意の順序で呼び出されます。
コンストラクターに関して、PHP 5.3.3 以降、特定の名前空間で定義されたクラス内のクラス名で名前が付けられたメソッドはコンストラクターとみなされなくなります。名前空間のないクラスでは、以前と同様にコンストラクターです。例:
名前空間 Foo がない場合は、Bar() もコンストラクターとして使用されます。さらに、次の状況が存在する場合:
つまり、__construct() とクラス名と同じ名前の関数の両方が含まれている場合、__construct() のみが呼び出されます。
2. __call() と __callStatic()
存在しないメソッドを呼び出そうとしたときに呼び出されます。 2 つのパラメーター。1 つはメソッド名、もう 1 つは呼び出されたメソッドのパラメーター配列です。
このうち、$argumentsは配列として渡されます。実行結果:
オブジェクトコンテキストでオブジェクトメソッド「runTest」を呼び出します
静的コンテキストで静的メソッド「runTest」を呼び出します
保護された関数とプライベートな関数のスコープにも注意してください:
3.__get() と __set()
存在しないオブジェクトのプロパティを読み取ろうとしたときに呼び出されます。
注: この関数を使用して、Java のリフレクションと同様のさまざまな操作を実装できます。
出力:
名前は存在しません
名前 = abc
4. __toString()
このメソッドは Java の toString() メソッドに似ています。オブジェクトを直接出力する場合、この関数は文字列を返す必要があります。
出力:
名前: abc、年齢: 12
PHP のオブジェクト処理部分のコアが完全に再開発され、より多くの機能が提供され、パフォーマンスが向上しました。 PHP の以前のバージョンでは、オブジェクトは基本型 (数値、文字列) と同じ方法で処理されました。この方法の欠点は、オブジェクトを変数に代入するとき、またはオブジェクトをパラメータに渡すときに、オブジェクトが完全にコピーされてしまうことです。新しいバージョンでは、上記の操作は値の代わりに参照 (参照はオブジェクトの識別子として理解できます) を渡します。
多くの PHP プログラマーはオブジェクトの古い処理方法を知らないかもしれません。実際、ほとんどの PHP アプリケーションは問題なく動作します。または、最小限の変更のみが必要です。
プライベート メンバーと保護されたメンバー
PHP5 では、プライベート メンバー変数と保護されたメンバー変数の概念が導入されました。これを使用して、クラス メンバーの可視性を定義できます。
例
保護されたメンバーにはサブクラスからアクセスできますが、プライベート メンバーにはクラス自体からのみアクセスできます。
コード:---------------------------------------------- -- ----------------------------------
class MyClass {
private $Hello = " Hello, World!\n";
protected $Bar = "Hello, Foo!\n";
protected $Foo = "Hello, Bar!\n";
function printHello() {
print "MyClass: :printHello () " . $this->gt;Hello;
print "MyClass::printHello() " . $this->Bar;
print "MyClass::printHello() " . $this->Foo;
}
}
class MyClass2 extends MyClass {
protected $Foo;
function printHello() {
MyClass::printHello(); /* 出力する必要があります */
print "MyClass2::printHello() " . > /* 何も出力しません */
print "MyClass2::printHello() " . $this->Bar; /* 出力しません (宣言されていません) */
print "MyClass2:: printHello( ) " . $this->Foo; /* 出力する必要があります */
}
}
$obj = new MyClass();
print $obj->Hello; /* 何も出力しません * /
print $obj->Bar; /* 何も出力しません */
print $obj->Foo /* 残りのテキストを出力する必要があります>>
この迂回はオブジェクト指向におけるカプセル化の概念である安全のためであり、Public を直接設定すると、すべてのオブジェクトがこのプロパティの値を自由に設定できるため、タスクのロジック判断がなくなり、セキュリティが向上します。