首頁  >  文章  >  後端開發  >  php的魔法方式包含哪些

php的魔法方式包含哪些

(*-*)浩
(*-*)浩原創
2019-10-09 10:53:462793瀏覽

在物件導向程式設計中,PHP提供了一系列的魔術方法,這些方法為程式設計提供了許多便利。 PHP中的魔術方法通常以__(兩個底線)開始,不需要顯示的呼叫而是由某種特定的條件出發。

php的魔法方式包含哪些

__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(),__wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在PHP 中稱為魔術方法(Magic methods)。 (推薦學習:PHP影片教學

註:在命名自己的類別方法時不能使用這些方法名,除非是想使用其魔術功能。

注意:PHP 將所有以 __(兩個底線)開頭的類別方法保留為魔術方法。所以在定義類別方法時,除了上述魔術方法,建議不要以 __ 為前綴。

__sleep() 和 __wakeup() 

public __sleep ( void ) : array
__wakeup ( void ) : void

serialize() 函數會檢查類別中是否存在一個魔術方法 __sleep()。如果存在,該方法會先被調用,然後再執行序列化操作。此功能可用於清理對象,並傳回一個包含對像中所有應被序列化的變數名稱的陣列。如果該方法未傳回任何內容,則 NULL 會序列化,並產生一個 E_NOTICE 等級的錯誤。

Note:

__sleep() 不能傳回父類別的私有成員的名字。這樣做會產生一個 E_NOTICE 等級的錯誤。可以用 Serializable 介面來替代。

__sleep() 方法常用於提交未提交的數據,或類似的清理操作。同時,如果有一些很大的對象,但不需要全部保存,這個功能就很好用。

與之相反,unserialize() 會檢查是否有一個 __wakeup() 方法。如果存在,則會先呼叫 __wakeup 方法,預先準備物件所需的資源。

__wakeup() 經常用在反序列化操作中,例如重新建立資料庫連接,或執行其它初始化操作。

<?php
class Connection 
{
    protected $link;
    private $server, $username, $password, $db;
    
    public function __construct($server, $username, $password, $db)
    {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $this->connect();
    }
    
    private function connect()
    {
        $this->link = mysql_connect($this->server, $this->username, $this->password);
        mysql_select_db($this->db, $this->link);
    }
    
    public function __sleep()
    {
        return array(&#39;server&#39;, &#39;username&#39;, &#39;password&#39;, &#39;db&#39;);
    }
    
    public function __wakeup()
    {
        $this->connect();
    }
}
?>

以上是php的魔法方式包含哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:php底層是c麼下一篇:php底層是c麼