亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中的面向對象OOP中的魔術方法

發布時間:2020-06-03 11:13:26 來源:網絡 閱讀:353 作者:shptc 欄目:web開發

一、什么是魔術方法:

PHP為我們提供了一系列用__開頭的函數,這些函數無需自己手動調用,會在合適的時機自動調用,這類函數稱為魔術函數。
例如:

1
function __construct(){} 在new一個新對象時自動調用此函數

二、PHP中都有那些魔術方法,以及它們的作用:
1.__construct():構造函數,new對象時自動調用

eg:

 

PHP中的面向對象OOP中的魔術方法

class Person{        public $name;        public $age;        
        function __construct($name,$age){            $this->name=$name;            $this->age=$age;
        }
}

PHP中的面向對象OOP中的魔術方法

 

在new新的Person對象時會自動調用__construct()函數,將傳入的參數分別賦給$name$age


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        public $name;        public $age;        
       function __destruct(){        echo "這個對象被銷毀了";
    }
}

PHP中的面向對象OOP中的魔術方法

同上所述,對象被銷毀時執行此魔術方法


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        private $name;        public $age;        
        function __get($name){          return $this->$name;
        }
}

PHP中的面向對象OOP中的魔術方法

 

如上代碼,$name被設為私有屬性后不能直接通過$this->name;的方式讀取,因此需要設置__get()魔術方法來讀取。


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        private $name;        public $age;        
        function __set($key,$value){            $this->$key=$value;
        }
}

PHP中的面向對象OOP中的魔術方法

 

同__get()方法,私有屬性不能通過$this->name="aaa";的方式直接設置,需要設置__set()方法,傳入的參數分別是屬性名和屬性值。


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        private $name;        public $age;        
        function __isset($name){        return isset($this->$name);
    }
}

PHP中的面向對象OOP中的魔術方法

 

使用isset檢測對象私有屬性時調用,其他同上。


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        private $name;        public $age;        
        function __unset($name){
            unset($this->$name);
        } }

PHP中的面向對象OOP中的魔術方法

同上,在用unset()函數刪除私有屬性時調用。


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        public $name;        public $age;        
       function __toString(){            $str = <<<str
            您要打印的內容是:<br>
            \$name=>{$this->name};<br>
            \$age=>{$this->age};<br>str;            return $str;
        }
}

PHP中的面向對象OOP中的魔術方法

 

使用echo打印對象時調用,返回打印對象時想要顯示的內容


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

 

PHP中的面向對象OOP中的魔術方法

   __call(, "您調用的函數{},參數列表"( "不存在/未公開"

PHP中的面向對象OOP中的魔術方法

 

如代碼所示,調用不存在的say(1,2,3);時,會打印

您調用的函數way,參數列表Array ( [0] => 123 ) 不存在


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        public $name;        public $age;        
       function __clone(){        $this->name="lisi";
        }
}    
$zhangsan=new Person("zhangsan",24);$lisi=clone $zhangsan;echo $lisi->name;

PHP中的面向對象OOP中的魔術方法

 

打印出的結果是"lisi",而不是"zhangsan"。

 

 

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

 

PHP中的面向對象OOP中的魔術方法

class Person{        public $name;        public $age;        
      function __sleep(){        return array("name","age");
    }
}

PHP中的面向對象OOP中的魔術方法

 

如上述代碼,在用serialize()序列化對象時只有"name","age"屬性會被序列化。


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

 

PHP中的面向對象OOP中的魔術方法

class Person{        public $name;        public $age;        
      function __wakeup(){        $this -> name = "lisi";
    }
}

PHP中的面向對象OOP中的魔術方法

 

將對象序列化后再反序列化,同時給對象的name屬性賦初值為"lisi"。


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

 

function __autoload($className){    include "class/".strtolower($className).".class.php";
}    
$zhangsan=new Person();$zhangsan->say();

如上述代碼,Person類不存在時調用__autolode()方法,載入寫在文件外的類,"class/".strtolower($className).".class.php";就是類文件的相對路徑,$className就是

不在本文件中的類的類名,因此在創建外部類文件時命名方式必須是小寫的類名.class.php。__autolode()方法也是惟一一個不用寫在類中的魔術方法。

以上就是PHP中的魔術方法,合理利用這些方法可以輕松實現對象的各種操作。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐安县| 正蓝旗| 桦南县| 盈江县| 阿城市| 余江县| 凤凰县| 荆门市| 郓城县| 青岛市| 长岭县| 乌鲁木齐县| 南木林县| 湄潭县| 武城县| 陵川县| 比如县| 安远县| 阳谷县| 满城县| 安丘市| 明星| 抚远县| 赤水市| 台湾省| 左权县| 翼城县| 奉新县| 靖江市| 襄樊市| 苍山县| 榆树市| 德化县| 永泰县| 东台市| 高州市| 万安县| 清徐县| 霸州市| 清涧县| 临桂县|