當前位置:編程學習大全網 - 編程語言 - php的魔法方式包含哪些

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 ) : voidserialize() 函數會檢查類中是否存在壹個魔術方法 __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('server', 'username', 'password', 'db');

}

public function __wakeup()

{

$this->connect();

}

}

>

  • 上一篇:新老生交流會的演講稿
  • 下一篇:火花塞壽命有限要及時檢查更換
  • copyright 2024編程學習大全網