php中的魔術方法__call(),__clone(),__set(),__get()

__call($a,$v),當在類外部調用類中不存在或者不可見(用protected,private修飾)的方法時,會自動調用__call(方法名,數組參數),此時會向改方法傳遞2個參數,第一個爲調用的方法名,第二個爲傳遞的參數放進數組裏。__clone()方法在類的對象被克隆時觸發。__set($key,$val)在類外部設置類中不存在或者不可見(protected,private修飾)的屬性時觸發該方法,此時傳遞2個參數,第一個是屬性名,第二個是屬性值。__get($key)在類外部獲取類中不存在或者不可見(protected,private修飾)的屬性時觸發該方法,此時傳遞1個參數,即爲屬性名。例子:

<?php
class test{
    protected $a=1;
    private $b=2;
    public function __clone(){
        echo "有人要克隆我<br/>";
    }
    public function __call($name,$arg){
        echo "有人要調用不存在或不可見的方法名",$name,",第一個參數是$arg[0]<br/>";
    }
    public function __set($k,$v){
        echo "有人要設置不存在或不可見的屬性",$k,"的值爲",$v,"<br/>";
    }
    public function __get($k){
        echo "有人要獲取不存在或不可見的屬性",$k;
    }

}
$test1=new test();
$test3=$test1;//此時$test3和$test1是同一個對象,即都指向同一個對象
$test2=clone $test1;//克隆後$test1和$test2是2個不同的對象,雖然存儲的值相同
$test1->abc(1,2,3);
$test1->a=3;
$test1->b;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章