首頁 >後端開發 >PHP問題 >php魔術方法的認識

php魔術方法的認識

藏色散人
藏色散人原創
2020-09-12 11:06:473465瀏覽

在php中將所有以“__”即兩個下劃線開頭的類別方法保留為魔術方法,PHP中魔術方法有“__construct()”、“__destruct()”、“__call()” 、「__callStatic()」、「__get()」等等。

php魔術方法的認識

推薦:《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中文網其他相關文章!

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