1. __construct() と __destruct()
インスタンスが作成/破棄されるときに呼び出され、0 個以上のパラメーターを渡すことができます。
class A { function A() { echo "build A"; } function __destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj);
Note: The destructorメソッドは、特定のオブジェクトへの他の参照がなくなるとすぐに、またはシャットダウンシーケンス中に任意の順序で呼び出されます。
コンストラクタに関しては、PHP5.3.3以降、定義は次のようになります。特定の名前空間内のクラス内のクラス名で名前が付けられたメソッドは、コンストラクターとはみなされなくなります。名前空間のないクラスでは、以前と同様にコンストラクターです。例:
namespace Foo;class Bar { public function Bar() { // treated as constructor in PHP 5.3.0-5.3.2 // treated as regular method as of PHP 5.3.3 }}
名前空間 Foo がない場合は、Bar() もコンストラクターとして使用されます。さらに、次の状況が存在する場合:
function __construct() { echo "construct A"; } function A() { echo "build A"; } function __destruct() { echo "destroy A"; } }
つまり、__construct() とクラス名と同じ名前の関数の両方が含まれている場合、__construct() のみが呼び出されます。
2. __call() と __callStatic()
存在しないメソッドを呼び出そうとしたときに呼び出されます。 2 つのパラメーター。1 つはメソッド名、もう 1 つは呼び出されたメソッドのパラメーター配列です。
class MethodTest{ public function __call($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling object method '$name' " . implode(' ', $arguments). "<br>"; } public static function __callStatic($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling static method '$name' " . implode(' ', $arguments). "<br>"; }}$obj = new MethodTest;$obj->runTest('in','object','context');MethodTest::runTest('in','static','context');
このうち、$arguments は配列として渡されます。実行結果:
Calling object method 'runTest' in object contextCalling static method 'runTest' in static context
また、関数のスコープが保護されプライベートであることにも注意してください:
class TestMagicCallMethod { public function foo() { echo __METHOD__.PHP_EOL."<br>"; } public function __call($method, $args) { echo __METHOD__.PHP_EOL."<br>"; if(method_exists($this, $method)) { $this->$method(); } } protected function bar() { echo __METHOD__.PHP_EOL."<br>"; } private function baz() { echo __METHOD__.PHP_EOL."<br>"; }}$test = new TestMagicCallMethod();$test->foo();/** * Outputs: * TestMagicCallMethod::foo */$test->bar();/** * Outputs: * TestMagicCallMethod::__call * TestMagicCallMethod::bar */$test->baz();/** * Outputs: * TestMagicCallMethod::__call * TestMagicCallMethod::baz */
3.__get() および __set()
に存在しない属性を読み取ろうとしたときオブジェクト時刻が呼び出されます。
注: この関数を使用して、Java のリフレクションと同様のさまざまな操作を実装できます。
class Test{ public function __get($key) { echo $key . " not exists"; } public function __set($key,$value) { echo $key . " = ".$value; }}$t = new Test();echo $t->name."<br>";$t->name = "abc";输出:name not existsname = abc
4. __toString()
このメソッドは、オブジェクトを直接出力する場合、この関数を呼び出し、文字列を返す必要があります。
すごいです
__isset()、__unset()、__sleep()、__wakeup()、__toString()、__invoke()、__set_state()、__clone() もありますが、詳細は説明しません。一つ。