首頁 >後端開發 >PHP問題 >php 魔術方法有哪些,作用是什麼?

php 魔術方法有哪些,作用是什麼?

青灯夜游
青灯夜游原創
2019-10-11 11:58:152791瀏覽

在物件導向程式設計中,PHP提供了一系列的魔術方法,這些方法為程式設計提供了許多便利。 PHP中的魔術方法通常以__(兩個底線)開始,不需要顯示的呼叫而是由某種特定的條件出發。這篇文章簡單總結了PHP中提供的魔術方法。

php 魔術方法有哪些,作用是什麼?

__construct()

#__construct()是類別的建構函數,是目前為止最常用的函數。在建立物件時,可以在建構函式中做一些初始化工作。可以為建構函式定義任多個參數,只要在實例化時傳入對應個數的參數即可。建構函式中出現的任何異常都會阻止物件的建立。

__desctruct()

__desctruct()是類別的析構函數,通常在銷毀物件或腳本執行結束時自動調用,析構函數不接收任何參數。經常在析構函數中執行一些清理工作,例如關閉資料庫連線等。

__call()

__call()在呼叫不存在或無法存取的方法時會被呼叫。它接收兩個參數,一個是被呼叫的方法的名字,一個是包含函數參數的陣列。我們可以使用這種方法呼叫子物件中得同名函數

__callStatic()

#__callStatic()當呼叫的靜態方法不存在或權限不足時會被呼叫。它接收兩個參數,一個是被呼叫的方法的名字,一個是包含函數參數的陣列。其使用跟__call()完全一樣。

__get()

__get()在我們嘗試存取一個不存在的屬性或非公有屬性時會被呼叫。它接收一個參數,該參數表示存取屬性的名字,並且將該屬性的值傳回

__set()

__set()在我們嘗試修改一個不可存取的屬性時會被調用,它接收兩個參數,一個表示屬性的名字,一個表示屬性的值。

__isset()

__isset()在對一個不可存取的屬性呼叫isset()或empty()方法時會被調用,它接收一個參數,表示屬性的名字。它應該傳回一個布林值,用來表示該屬性是否存在。

__unset()

__unset()在調用unset()函數銷毀一個不能存取的屬性時會被調用,它接收一個參數,表述屬性的名字。

__sleep()

__sleep()在對一個物件序列化時(呼叫 serialize())會被呼叫。它不接收任何參數,而且應該傳回一個包含所有應該被序列化的屬性的陣列。在這個魔術方法中,也可以執行一些其他操作。

有一點要注意的是,不要再在該函數中進行任何的析構操作,因為這可能會影響正在運行的物件

__wakeup()

__wakeup()在對儲存的物件反序列化時會被呼叫。它不接收任何參數,也沒有任何回傳值。可以用它來處理在序列化時丟失的資料庫連接或資源

__toString()

__toString()當我們將物件當作字串一樣使用時會被調用,它不接收任何參數。該方法允許我們定義物件的表現形式。

__invoke()

呼叫函數的方式呼叫一個物件時的回應方法

__set_state()

#呼叫var_export()匯出類別時,此靜態方法會被呼叫。

__clone()

__clone()可以解決上面的問題。當對一個物件使用 clone 關鍵字時,該魔術方法會被呼叫。

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

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