PHP 魔術方法

來源:互聯網
上載者:User

標籤:對象   protected   準備   使用   methods   clone   nec   好用   iss   

__construct(),__desturct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state(),__clone(),和,__debuginfo() 等方法在 PHP 中被稱為"魔術方法"(Magic methods)。在命名自己的類方法時不能使用這些方法名.

注意:__sleep()不能返回父類的私人成員的名字。這樣做會產生一個 E_NOTICE 層級的錯誤。可以用 Serializable 介面來替代。

 

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

 

與之相反,unserlalize()會檢查是否存在一個 __wakeup()方法。如果存在,則會先調用 __wakeup 方法,預先準備對象需要的資源。

 

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

例子:Sleep 和 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(‘server‘, ‘username‘, ‘password‘, ‘db‘);
    }
    
    public function __wakeup()
    {
        $this->connect();
    }
}
?>

 

 

 

PHP 魔術方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.