【溫故知新】php 魔術方法

<?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);
相關文章
相關標籤/搜索