首頁 >後端開發 >PHP問題 >php中的類魔術方法有哪些

php中的類魔術方法有哪些

王林
王林原創
2020-08-20 13:50:172427瀏覽

php中的類別魔術方法有:1、__sleep,傳回一個包含物件中所有應被序列化的變數名稱的陣列;2、__tostring,傳回一個類別被當作字串時要輸出的內容;3、__construct,構造方法;4、__destruct,析構方法。

php中的類魔術方法有哪些

在PHP中將所有以雙底線(__)開頭的類別方法保留為魔術方法。

(推薦教學:php圖文教學

下面我們來看看有哪些魔術方法:

1、__sleep:回傳一個包含物件中所有應被序列化的變數名稱的陣列。

serialize函數在序列化類別時會先檢查類別中是否存在__sleep方法。如果存在,會先呼叫此方法然後再執行序列化操作,並且只對__sleep傳回的陣列中的屬性進行序列化。如果__sleep不回傳任何內容,則null會被序列化,並產生E_NOTICE層級的錯誤。

__sleep不能傳回父類別的私有成員,否則會產生E_NOTICE層級的錯誤。對於一些很大但不需要保存全部資料的物件此方法很有用。

2、__wakeup:與__sleep相反,是在unserialize函數反序列化時首先會檢查類別中是否存在__wakeup方法,如果存在會先呼叫次方法然後再執行反序列化操作。用於在反序列化之前準備一些物件所需的資源,或其他初始化操作。

3、__tostring:傳回一個類別被當做字串時要輸出的內容,此方法必須傳回字串並且不能在此方法中拋出異常,否則會產生致命錯誤。

在PHP5.2之前此方法只有在直接使用echo和print時才生效,之後則可以在任何字串環境生效,如果將一個未定義__toString方法的物件轉換為字串,會產生致命錯誤。

(影片教學推薦:php影片教學

4、__invoke:PHP5.3起,當嘗試以函數的方式呼叫物件時,會呼叫此方法。

5、__set_state:PHP5.1起,當呼叫var_export函數匯出類別時,會呼叫此靜態方法。此方法只有一個參數,是一個包含以屬性為鍵,屬性值為值的陣列。此方法可以用來控制哪些成員可以被匯出。

6、__debugInfo:PHP5.6起,當呼叫var_dump函數列印物件的屬性時會呼叫此方法,此方法可以用來控制哪些屬性可以被列印,如果沒有定義此方法,則物件中所有的public、protected、private的屬性都會被列印。傳回一個包含可以被列印的屬性的陣列。

7、__construct:建構子。

8、__destruct:析構函數。

9、__set、__get、__isset、__unset:重載屬性。

10、__call、__callstatic:重載方法。

11、__clone:物件複製。

以上是php中的類魔術方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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