<?php class Magic{ private $name; /** *構造方法,在類被實例化時自動調用,通常用於初始化操做 */ public function __construct(){ echo "自動調用 __construct() 方法\n"; } /** *析構方法,對象被銷燬時自動調用 */ public function __destruct(){ echo "對象被銷燬時調用我 \n"; } /** *克隆方法,當對象被克隆時,將會自動調用 */ public function __clone(){ echo "對象被克隆時調用 \n"; } /** *屬性獲取方法,當對象要調用一個被保護或不存在的屬性時,__get方法就會自動被調用,並傳入調用的屬性名稱 */ public function __get($key){ echo "你所調用的屬性不存在或沒有權限訪問\n"; } /** *屬性設置方法,當對象設置一個被保護或不存在的屬性時,__set會被執行,並傳入要 *設置的屬性名稱和屬性值,注意這裏的設置令對象自己沒有發生改變,除非更改操做是發生在__set方法內 */ public function __set($key,$value){ echo "你所設置的屬性不存在或沒有權限訪問\n"; } /** *當用isset判斷一個對象是否有這個屬性,而且這個屬性是被保護或者不存在時被自動執行,並傳入判斷的屬性名稱 **/ public function __isset($key){ echo "屬性 {$key} 不存在或被保護 \n"; } /** *當用unset刪除一個對象的保護屬性或未存在的屬性時,自動被執行 **/ public function __unset($key){ echo "想要刪除的屬性 {$key} 不存在或被保護 \n"; } /** *當對象在調用一個被保護或不存在的方法時,會自動執行,並傳入兩個參數$method爲方法嗎,$arguments爲該方法的參數數組 **/ public function __call($method,$params){ echo "您所調用的方法{$method}不存在\n"; } /** *當調用了類當中某個被保護或不存在的靜態方法時,會自動執行,並傳入兩個參數$method爲方法,$arguments爲該方法的參數數組 **/ public static function __callStatic($method,$params){ echo "您所調用的靜態方法{$method}不存在\n"; } /** *用於一個類被當成字符串時應怎樣迴應 */ public function __toString(){ return "這是一個對象不能直接輸出\n"; } /** *當嘗試以調用函數的方式調用一個對象時 */ public function __invoke($k){ echo "我是一個對象不是一個函數{$k}\n"; } /** *對象被序列化以前調用 **/ public function __sleep(){ echo "對象被序列化以前調用\n"; } /** *對象被反序列化以前調用 **/ public function __wakeup(){ echo "對象被反序列化以前調用\n"; } } $magic = new Magic(); $magic_clone = clone($magic); echo $magic->name; $magic->name = "hahaha"; isset($magic->sex); unset($magic->sex); $magic->setName(); Magic::setName(); echo $magic; $magic("mayuan"); $magic_se = serialize($magic); unserialize($magic_se);