在php中將所有以“__”即兩個下劃線開頭的類別方法保留為魔術方法,PHP中魔術方法有“__construct()”、“__destruct()”、“__call()” 、「__callStatic()」、「__get()」等等。
推薦:《PHP影片教學》
魔術方法
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(),__invoke(),__set_state (), __clone() 和__debugInfo() 等方法在PHP 中稱為魔術方法(Magic methods)。在命名自己的類別方法時不能使用這些方法名,除非是想使用其魔術功能。
Caution
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魔術方法的認識的詳細內容。更多資訊請關注PHP中文網其他相關文章!