php中的類別魔術方法有:1、__sleep,傳回一個包含物件中所有應被序列化的變數名稱的陣列;2、__tostring,傳回一個類別被當作字串時要輸出的內容;3、__construct,構造方法;4、__destruct,析構方法。
在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中文網其他相關文章!