php魔術方法羅列

來源:互聯網
上載者:User

標籤:des   int   get   c   string   資料   

##__sleep() 和 __wakeup()

當序列化(serialize)對象時,PHP 將試圖在序列動作之前調用該對象的成員函數 __sleep() 。
__sleep() 方法常用於提交未提交的資料,或類似的清理操作。同時,如果有一些很大的對象,但不需要全部儲存,這個功能就很好用。
類似的,當使用 unserialize()  恢複對象時, 將調用 __wakeup()  成員函數。
__wakeup() 經常用在還原序列化操作中,例如重建立立資料庫連接,或執行其它初始化操作。


##__construct(),__destruct()

如果子類中定義了建構函式則不會隱式調用其父類的建構函式。
要執行父類的建構函式,需要在子類的建構函式中調用 parent::__construct() 。
如果子類沒有定義建構函式則會如同一個普通的類方法一樣從父類繼承並執行(假如沒有被定義為 private 的話)。
自 PHP 5.3.3 起,在命名空間中,與類名同名的方法不再作為建構函式。非命名空間中的類依然可用。
解構函式基本同建構函式一樣,得記住下面這一句話:解構函式即使在使用 exit()  終止指令碼運行時也會被調用。在解構函式中調用 exit()  將會中止其餘關閉操作的運行。



##屬性重載
##__get(),__set(),__isset(),__unset()

在給不可訪問屬性賦值時,__set() 會被調用。
讀取不可訪問屬性的值時,__get() 會被調用。
當對不可訪問屬性調用 isset()  或 empty()  時,__isset() 會被調用。
當對不可訪問屬性調用 unset()  時,__unset() 會被調用。

屬性重載只能在對象中進行。在靜態方法中,這些魔術方法將不會被調用。所以這些方法都不能被 聲明為 static。從 PHP 5.3.0 起, 將這些魔術方法定義為 static 會產生一個警告。



##方法重載
##__call(),__callStatic()

public mixed  __call  ( string $name  , array $arguments  )
public static mixed  __callStatic  ( string $name  , array $arguments  )
在對象中調用一個不可存取方法時,__call() 會被調用。
用靜態方式中調用一個不可存取方法時,__callStatic() 會被調用。
$name  參數是要調用的方法名稱。 $arguments  參數是一個枚舉數組,包含著要傳遞給方法 $name  的參數。




##__toString()

__toString() 方法用於一個類被當成字串時應怎樣回應。例如 echo $obj; 應該顯示些什麼。此方法必須返回一個字串,否則將發出一條 E_RECOVERABLE_ERROR  層級的致命錯誤。
不能在 __toString() 方法中拋出異常。這麼做會導致致命錯誤。
需要指出的是在 PHP 5.2.0 之前,__toString() 方法只有在直接使用於 echo  或 print  時才會生效。
PHP 5.2.0 之後,則可以在任何字串環境生效(例如通過 printf() ,使用 %s 修飾符),但不能用於非字串環境(如使用 %d 修飾符)。
自 PHP 5.2.0 起,如果將一個未定義 __toString() 方法的對象轉換為字串,會產生 E_RECOVERABLE_ERROR  層級的錯誤。



##__invoke() (PHP 5.3.0起)

當嘗試以調用函數的方式調用一個對象時,__invoke() 方法會被自動調用。
本特性只在 PHP 5.3.0 及以上版本有效。


##__set_state() ( PHP 5.1.0 起)

static object __set_state  ( array $properties  )
自 PHP 5.1.0 起當調用 var_export()  匯出類時,此靜態 方法會被調用。
本方法的唯一參數是一個數組,其中包含按 array(‘property‘ => value, ...) 格式排列的類屬性。



##__clone()

對象複製可以通過 clone 關鍵字來完成(如果可能,這將調用對象的 __clone() 方法)。對象中的 __clone() 方法不能被直接調用。
當複製完成時,如果定義了 __clone() 方法,則新建立的對象(複製產生的對象)中的 __clone() 方法會被調用,可用於修改屬性的值(如果有必要的話)。
單例模式中得禁止clone複製對象

具體例子見手冊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.