(推奨チュートリアル: PHP ビデオ チュートリアル)
クラスがインスタンス化されるとき
簡単に言うと、新しいクラスが作成されると、このメソッドは自動的に実行されます
<?php class autofelix { public function __construct() { echo '我是飞兔小哥~'; } } new autofelix();
クラスが破棄されたとき 自動的にトリガーされるタイミング
このメソッドをトリガーするには、unset メソッドを使用できます
<?php class autofelix { public function __destruct() { echo '我是飞兔小哥,别销毁我~'; } } unset(new autofelix());
クラスのクローン作成時に自動的に呼び出されます
<?php class autofelix { public function __clone() { echo '我是飞兔小哥,我想克隆你~'; } } $a = new autofelix(); clone $a;
呼び出されるメソッドが存在しないか、権限が不十分な場合に自動的に呼び出されます
たとえば、クラス内で変更されたプライベート メソッドをクラス外から呼び出す場合
<?php class autofelix { private function say() { echo '我是飞兔小哥~'; } public function __call($name, $arguments) { echo '你无权调用' . $name . '方法'; die; } } (new autofelix())->say();
呼び出される静的メソッドが存在しない場合、または権限が不十分な場合に自動的に呼び出されます
たとえば、プライベートに変更されたメソッドを呼び出します。クラス外からクラス内の静的メソッド
<?php class autofelix { private static function say() { echo '我是飞兔小哥~'; } public function __callStatic($name, $arguments) { echo '你无权调用' . $name . '方法'; die; } } $a = new autofelix(); $a::say();
このメソッドは、var_dump() クラス オブジェクトのときに呼び出されます
このメソッドが定義されていない場合、 var_dump() はすべてのクラスを出力します。 Attribute
<?php class autofelix { public function __debugInfo() { echo '飞兔小哥给你温馨提示'; } } var_dump(new autofelix());
これを通じて、オブジェクト外のプライベート メンバー属性を取得できます
<?php class autofelix { private $name = '飞兔小哥'; public function __get($name) { if(in_array($name, ['name', 'age'])) { echo $this->name; } else { echo '不是什么东西都能访问的~'; } } } (new autofelix())->name;
ペアリングする場合 isset() または empty() を呼び出すときにアクセスできないプロパティが自動的に呼び出されます
<?php class autofelix { private $name = '飞兔小哥'; public function __isset($name) { if(in_array($name, ['name', 'age'])) { echo $this->name; } else { echo '不是什么东西都能访问的~'; } } } isset(new autofelix()->name);
に値を割り当てるときにトリガーされます未定義のプロパティ
<?php class autofelix { public function __set($name, $value) { echo '你想给' . $name . '赋值' . $value; } } (new autofelix())->name = '飞兔小哥';
オブジェクト自体を関数として直接使用することはできません
オブジェクトが関数として呼び出される場合、このメソッドは次のようになります。 triggered
<?php class autofelix { public function __invoke() { echo '你想调用我?'; } } (new autofelix())();
serialize() がクラス外で呼び出されたときに自動的に呼び出されます
<?php class autofelix { public function __sleep() { echo '我是飞兔小哥~'; } } serialize(new autofelix());
になりますunserialize() メソッドの実行時に呼び出されます 自動呼び出し
<?php class autofelix { public function __wakeup() { echo '我是飞兔小哥~'; } } unserialize(new autofelix());
クラスが文字列として扱われるときに返されるもの
文字列型ここで返される必要があります。そうでない場合は、致命的なエラーが報告されます。
<?php class autofelix { public function __toString() { return '我是你得不到的对象...'; } } $a = new autofelix(); echo $a;
アクセスできないプロパティに対して unset() が呼び出される場合、自動的に
<?php class autofelix { private $name = '飞兔小哥'; public function __unset($name) { echo '别删我,我是你兔哥'; } } $a = new autofelix(); unset($a->name);# が呼び出されます。 ## (推奨チュートリアル:
PHP ビデオ チュートリアル)
以上がPHP で一般的に使用されるマジック メソッド (概要共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。