您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)php中有哪些魔幻方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
魔幻方法有:“__construct()”、“__destruct()”、“__set()”、“__get()”、“__isset()”、“__unset()”、“__sleep()”、“___wakeup()”、“__call()”等等。
php魔幻(術(shù))方法
在面向?qū)ο缶幊讨?,PHP 提供了一系列的魔術(shù)方法,這些魔術(shù)方法為編程提供了很多便利,在 PHP 中的作用是非常重要的。PHP 中的魔術(shù)方法通常以__(兩個下劃線)開始,并且不需要顯式的調(diào)用而是在某種特定條件下自動調(diào)用的。
魔術(shù)方法 | 作用 |
---|---|
__construct() | 實(shí)例化類時自動調(diào)用 |
__destruct() | 類對象使用結(jié)束時自動調(diào)用 |
__set() | 在給未定義的屬性賦值時自動調(diào)用 |
__get() | 調(diào)用未定義的屬性時自動調(diào)用 |
__isset() | 使用 isset() 或 empty() 函數(shù)時自動調(diào)用 |
__unset() | 使用 unset() 時自動調(diào)用 |
__sleep() | 使用 serialize 序列化時自動調(diào)用 |
__wakeup() | 使用 unserialize 反序列化時自動調(diào)用 |
__call() | 調(diào)用一個不存在的方法時自動調(diào)用 |
__callStatic() | 調(diào)用一個不存在的靜態(tài)方法時自動調(diào)用 |
__toString() | 把對象轉(zhuǎn)換成字符串時自動調(diào)用 |
__invoke() | 當(dāng)嘗試把對象當(dāng)方法調(diào)用時自動調(diào)用 |
__set_state() | 當(dāng)使用 var_export() 函數(shù)時自動調(diào)用,接受一個數(shù)組參數(shù) |
__clone() | 當(dāng)使用 clone 復(fù)制一個對象時自動調(diào)用 |
__debugInfo() | 使用 var_dump() 打印對象信息時自動調(diào)用 |
下面簡單介紹幾個常用的魔術(shù)方法:
1、__set() 方法
在為當(dāng)前環(huán)境下未定義或不可見的類屬性賦值時,會自動調(diào)用 __set() 方法。定義該方法的語法格式如下:
public function __set($key, $value){ ... ... ; }
其中,參數(shù) $key 是要操作的變量名稱,$value 為變量 $key 的值。
2、__get() 方法
在調(diào)用或獲取當(dāng)前環(huán)境下未定義或不可見的類屬性時,會自動調(diào)用 __get() 方法,定義該方法的語法格式如下:
public function __get($name){ ... ... ; }
參數(shù) $name 為要操作的變量名稱。
3、__isset() 方法
當(dāng)在類外部對類中不可訪問或不存在的屬性使用 isset() 或 empty() 函數(shù)時,會自動調(diào)用 __isset() 方法,該方法的語法格式如下:
public function __isset($name){ ... ... ; }
參數(shù) $name 為要訪問的屬性名稱。
isset() 函數(shù)可以檢查一個變量是否存在并且不為 NULL,傳入一個變量作為參數(shù),如果傳入的變量存在則傳回 true,否則傳回 false。
empty() 函數(shù)可以檢查一個變量是否為空,同樣需要傳入一個變量作為參數(shù),如果變量并不存在,或者變量的值等于 FALSE,那么這個變量會被認(rèn)為不存在。
類中的公有成員可以在類外訪問,而私有成員則無法在類外訪問。也就是說,我們可以使用 isset() 或 empty() 函數(shù)來檢查類中的公有屬性是否存在,而對類中的私有屬性這兩個函數(shù)就無效了。
如果想要使用 isset() 或 empty() 函數(shù)對類中的私有屬性進(jìn)行檢測的話,我們只需要在類中添加一個 __isset() 方法就可以了,當(dāng)在類外部使用 isset() 或 empty() 函數(shù)時,會自動調(diào)用類里面的 __isset() 方法。
4、__unset() 方法
當(dāng)在類外部對類中不可訪問或不存在的屬性使用 unset() 函數(shù)時,__unset() 方法會被自動調(diào)用,該方法的語法格式如下:
public function __unset($name){ ... ... ; }
參數(shù) $name 為要訪問的屬性名稱。
我們先來看一下 unset() 函數(shù),unset() 函數(shù)的作用是刪除指定的變量,需要傳入一個或多個變量作為參數(shù),另外,該函數(shù)沒有返回值。
同樣,我們也可以使用 unset() 函數(shù)在類外部去刪除類中的成員屬性。與上面介紹的 __isset() 方法相似,如果要刪除類中的公有屬性的話直接使用 unset() 函數(shù)即可;如果要刪除類中的私有屬性的話,則需要在類中添加一個 __unset() 方法。
5、__call() 方法
當(dāng)調(diào)用類中一個不可訪問或不存在的方法時,__call() 方法會被調(diào)用。該方法的語法格式如下:
public function __call($name, $arguments){ ... ... ; }
其中,$name 為要調(diào)用的方法名稱,$arguments 為傳遞給 $name 的參數(shù)所組成的數(shù)組。
當(dāng)調(diào)用的方法不存在時會自動調(diào)用 __call() 方法,程序會繼續(xù)執(zhí)行下去,從而可以避免當(dāng)調(diào)用方法不存在時產(chǎn)生錯誤所導(dǎo)致的程序終止。
6、__clone() 方法
可以使用 clone 關(guān)鍵字復(fù)制對象,當(dāng)復(fù)制完成時,如果定義了 __clone() 方法,則新創(chuàng)建的對象(復(fù)制生成的對象)中的 __clone() 方法會被自動調(diào)用,通過該方法我們可以做一些必要的操作。__clone() 方法的語法格式如下:
public function __clone(){ ... ... ; }
看完上述內(nèi)容,你們對php中有哪些魔幻方法有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。