(推薦教學:PHP影片教學)
當類別被實例化的時候就會呼叫
簡單來說,就是new 一個類別的時候,這個方法就會自動執行
<?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;
當要呼叫的方法不存在或權限不足時候會自動呼叫
例如我在類別的外部呼叫類別內部的private 修飾的方法
<?php class autofelix { private function say() { echo '我是飞兔小哥~'; } public function __call($name, $arguments) { echo '你无权调用' . $name . '方法'; die; } } (new autofelix())->say();
當要呼叫的靜態方法不存在或權限不足時候會自動呼叫
例如我在類別的外部呼叫類別內部的private 修飾的靜態方法
<?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() 將會列印出所有的類屬性
<?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 = '飞兔小哥';
物件本身不能直接當函數用
如果物件被當作函數呼叫就會觸發該方法
<?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());
當一個類別被當作字串處理時應該回傳什麼
這裡必須傳回一個string 類型不然會報致命錯誤
<?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中文網其他相關文章!