php類別的魔術方法有:1、「__sleep」方法,傳回一個包含物件中所有應被序列化的變數名稱的陣列;2、「__wakeup」方法,與「__sleep」相反;3 、「__tostring」方法,傳回一個類別被當做字串時要輸出的內容等等。
本教學操作環境:windows7系統、php5.6版,此方法適用於所有品牌電腦。
推薦:《PHP影片教學》
PHP類別的魔術方法
PHP將所有以雙底線(__ )開頭的類別方法保留為魔術方法,所以在定義類別方法時除了以下魔術方法,建議不要以__開頭。
__sleep:傳回一個包含物件中所有應被序列化的變數名稱的陣列。 serialize函數在序列化類別時會先檢查類別中是否有__sleep方法。如果存在,會先呼叫此方法然後再執行序列化操作。並且只對__sleep傳回的陣列中的屬性進行序列化。如果__sleep不回傳任何內容,則null會被序列化,並產生E_NOTICE層級的錯誤。 __sleep不能傳回父類別的私有成員,否則會產生E_NOTICE層級的錯誤。對於一些很大但不需要保存全部資料的物件此方法很有用。
__wakeup:與__sleep相反,是在unserialize函數反序列化時首先會檢查類別中是否存在__wakeup方法,如果存在會先呼叫次方法然後再執行反序列化操作。用於在反序列化之前準備一些物件所需的資源,或其他初始化操作。
__tostring:傳回一個類別被當做字串時要輸出的內容,此方法必須傳回字串並且不能在此方法中拋出異常,否則會產生致命錯誤。在PHP5.2之前此方法只有在直接使用echo和print時才生效,之後則可以在任何字串環境生效,如果將一個未定義__toString方法的物件轉換為字串,會產生致命錯誤。
__invoke:PHP5.3起,當嘗試以函數的方式呼叫物件時,會呼叫此方法。
__set_state:PHP5.1起,當呼叫var_export函數導出類別時,會呼叫此靜態方法。此方法只有一個參數,是一個包含以屬性為鍵,屬性值為值的陣列。此方法可以用來控制哪些成員可以被匯出。
__debugInfo:PHP5.6起,當呼叫var_dump函數列印物件的屬性時會呼叫此方法,此方法可以用來控制哪些屬性可以被列印,如果沒有定義此方法,則物件中所有的public、protected、private的屬性都會被列印。傳回一個包含可以被列印的屬性的陣列。
__construct:建構子。
__destruct:析構函數。
__set、__get、__isset、__unset:重載屬性。
__call、__callstatic:重載方法。
__clone:物件複製。
<?php class A{ private $var; public $var2="b"; function __construct(){ $this->var=mt_rand(); } function __sleep(){ return array("var","var2"); } function __wakeup(){ $this->var=mt_rand(); } function __toString(){ return "class[".__CLASS__."]:{var:$this->var,var2:$this->var2}\n"; } function __invoke($arg){ $this->var2=$arg; } static function __set_state($arr){ $a=new A(); $a->var=$arr['var']; return $a; } } $a=new A(); $str=serialize($a); echo "$str\n"; $b=unserialize($str); var_dump($b); $b("inv-b"); echo $b; eval('$c=' . var_export($b,true) . ';'); var_dump($c); ?>
更多程式相關知識,請造訪:程式設計學習! !
以上是php 類別的魔術方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!