1. 程式人生 > >PHP OOP 魔術方法

PHP OOP 魔術方法

需要 con 實例化 echo 對象 def sse ase urn

1、__construct():構造函數,new一個新對象時,自動調用   

[public] function __construct($name=""){
     $this -> name = $name;
 }

2、__destruct():析構函數,當一個對象被銷毀前,自動調用

 function __destruct(){
     echo "";
}

3、__get():訪問類中私有屬性時,自動調用。傳遞讀取的屬性名,返回$this->屬性名  

function __get($key){
switch ($key) {
case ‘name‘:
return $this->$key."(這是__get讀取時加上的文字)";
case ‘age‘:
return "0".$this->$key;
default:
return $this->$key;
}
return $this->$key;
}

4、__set():給類的私有屬性賦值時,自動調用。傳遞需要設置的屬性名和屬性值

function __set($key,$value){
     if($key=="name"){
                  $this->$key = $value."(這是__set設置上的文字!)";
                 return;
            }
            
            $this->$key = $value;
 }

5、__isset():使用isset()檢測對象私有屬性時,自動調用。傳遞檢測的屬性名,返回isset($this->屬性名)

         function __isset($name){
            if($name=="sex") return;
            return isset($this->$name);
        }    

6、__unset():使用unset()刪除對象私有屬性時,自動調用。傳遞刪除的函數名,方法中執行unset($this->屬性名)

        function __unset($name){
            if($name=="name"){
                echo "<span style=‘color:red;‘>哈哈哈哈name你刪不掉!</span><br>
"; return; } unset($this->$name); }

7、__toString():使用echo打印對象時,自動調用。返回想要在打印對象時顯示的內容,返回必須是字符串

        function __toString(){
            $str = <<<str
            您要打印的對象屬性如下:<br/>
            \$name => {$this->name};<br/>
            \$age => {$this->age};<br/>
str;
            return $str;
        }        

8、__call():調用一個類中未定義或未公開的方法時,自動調用。傳遞被調用的函數名,和參數列表數組

        function __call($funcName,$funcParams){
            echo "您調用的函數:{$funcName},參數列表";
            print_r($funcParams)
        }
    

9、__clone():當使用clone關鍵字克隆一個對象時,自動調用。作用是為新克隆的對象進行初始化賦值

        function __clone(){
            $this->name = "李四";
        }

10、__sleep():對象反序列化時,自動調用。返回一個數組,數組中的值就是可以序列化的屬性

        function __sleep(){
            return array("name","age");  //只有name/age兩個屬性可以串行化
        }

11、__wakeup():對象反序列化時,自動調用。為反序列化新產生的對象,進行初始化賦值

        function __wakeup(){
            $this->name = "李四";
        }

12、__autoload():需要在類外部聲明函數。當實例化一個未聲明的類時,自動調用。傳遞實例化的類名,可以使用類名自動加載對應的類文件

    function __autoload($className){
        include strtolower($className).".class.php"
    }

PHP OOP 魔術方法