魔幻方法有:「__construct()」、「__destruct()」、「__set()」、「__get()」、「__isset()」、「__unset()」、「__sleep() 」、「___wakeup()」、「__call()」等等。
本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦
php魔幻(術)方法
在物件導向程式設計中,PHP 提供了一系列的魔術方法,這些魔術方法為程式設計提供了許多便利,在PHP 中的作用是非常重要的。 PHP 中的魔術方法通常以__(兩個底線)開始,不需要明確的呼叫而是在某種特定條件下自動呼叫的。
魔術方法 | 作用 |
---|---|
#__construct() | 當實例化類別時自動呼叫 |
__destruct() | 類別物件使用結束時自動呼叫 |
__set() | 在為未定義的屬性賦值時自動呼叫 |
__get() | #呼叫未定義的屬性時自動呼叫 |
__isset() | 使用isset() 或empty() 函數時自動呼叫 |
__unset() | 使用unset() 時自動調用 |
__sleep() | 使用serialize 序列化時自動呼叫 |
__wakeup() | #使用unserialize 反序列化時自動呼叫 |
__call() | 呼叫不存在的方法時自動呼叫 |
__callStatic () | 呼叫一個不存在的靜態方法時自動呼叫 |
__toString() | 把物件轉換成字串時自動呼叫 |
__invoke() | 當嘗試把物件當方法呼叫時自動呼叫 |
__set_state() | #當使用var_export() 函數時自動調用,接受一個數組參數 |
__clone() | 當使用clone 複製一個物件時自動調用 |
#__debugInfo() | 使用var_dump() 列印物件資訊時自動呼叫 |
下面簡單介紹幾個常用的魔術方法:
1、__set() 方法
在為目前環境下未定義或不可見的類別屬性賦值時,會自動調用__set() 方法。定義此方法的語法格式如下:
public function __set($key, $value){ ... ... ; }
其中,參數 $key 是要操作的變數名稱,$value 為變數 $key 的值。
2、__get() 方法
在呼叫或取得目前環境下未定義或不可見的類別屬性時,會自動呼叫__get() 方法,定義該方法的語法格式如下:
public function __get($name){ ... ... ; }
參數$name 為要操作的變數名稱。
3、__isset() 方法
當在類別外部對類別中不可存取或不存在的屬性使用isset() 或empty() 函數時,會自動呼叫__isset()方法,此方法的語法格式如下:
public function __isset($name){ ... ... ; }
參數$name 為要存取的屬性名稱。
isset() 函數可以檢查一個變數是否存在且不為 NULL,傳入一個變數作為參數,如果傳入的變數存在則傳回 true,否則傳回 false。
empty() 函數可以檢查一個變數是否為空,同樣需要傳入一個變數作為參數,如果變數並不存在,或者變數的值等於 FALSE,那麼這個變數會被認為不存在。
類別中的公有成員可以在類別外訪問,而私有成員則無法在類別外存取。也就是說,我們可以使用 isset() 或 empty() 函數來檢查類別中的公有屬性是否存在,而對類別中的私有屬性這兩個函數就無效了。
如果想要使用isset() 或empty() 函數來偵測類別中的私有屬性的話,我們只需要在類別中加入一個__isset() 方法就可以了,當在類別外部使用isset() 或empty() 函數時,會自動呼叫類別裡面的__isset() 方法。
4、__unset() 方法
當在類別外部對類別中不可存取或不存在的屬性使用unset() 函數時,__unset() 方法會被自動調用,該方法的語法格式如下:
public function __unset($name){ ... ... ; }
參數$name 為要存取的屬性名稱。
我們先來看看 unset() 函數,unset() 函數的作用是刪除指定的變量,需要傳入一個或多個變數作為參數,另外,該函數沒有傳回值。
同樣,我們也可以使用 unset() 函數在類別外部去刪除類別中的成員屬性。與上面介紹的__isset() 方法相似,如果要刪除類別中的公有屬性的話直接使用unset() 函數即可;如果要刪除類別中的私有屬性的話,則需要在類別中新增一個__unset()方法。
5、__call() 方法
當呼叫類別中一個不可存取或不存在的方法時,__call() 方法會被呼叫。此方法的語法格式如下:
public function __call($name, $arguments){ ... ... ; }
其中,$name 為要呼叫的方法名稱,$arguments 為傳遞給 $name 的參數所組成的陣列。
當呼叫的方法不存在時會自動呼叫 __call() 方法,程式會繼續執行下去,從而可以避免當呼叫方法不存在時產生錯誤所導致的程式終止。
6、__clone() 方法
可以使用clone 關鍵字複製對象,當複製完成時,如果定義了__clone() 方法,則新建立的對象(複製產生的對象)中的__clone() 方法會被自動調用,透過該方法我們可以做一些必要的操作。 __clone() 方法的語法格式如下:
public function __clone(){ ... ... ; }
此函數不需要傳入參數。
推薦學習:《PHP影片教學》
以上是php魔幻(術)法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!