標籤:對象 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 魔術方法