PHP的十六個(gè)魔術(shù)方法
PHP中把以兩個(gè)下劃線__開頭的方法稱為魔術(shù)方法(Magic methods),這些方法在PHP中充當(dāng)了舉足輕重的作用。
魔術(shù)方法是一種特殊的方法,當(dāng)對(duì)對(duì)象執(zhí)行某些操作時(shí)會(huì)覆蓋 PHP 的默認(rèn)操作。
注意:
PHP 保留所有以 __ 開頭的方法名稱。 因此,除非覆蓋 PHP 的行為,否則不建議使用此類方法名稱。
下列方法名被認(rèn)為是魔術(shù)方法:
__construct() 、 __destruct() 、 __call() 、 __callStatic() 、 __get() 、 __set() 、 __isset() 、 __unset() 、 __sleep() 、 __wakeup() 、 __serialize() 、 __unserialize() 、 __toString() 、 __invoke() 、 __set_state() 、 __clone() 、 __debugInfo() 。
注意:
除了 __construct(), __destruct() ,和 __clone() 之外的所有魔術(shù)方法都 必須 聲明為 public, 否則會(huì)發(fā)出 E_WARNING。
在 PHP 8.0.0 之前沒有為魔術(shù)方法 __sleep() 、 __wakeup() 、 __serialize() 、 __unserialize() 、 __set_state() 發(fā)出診斷信息。
注意:
如果定義魔術(shù)方法時(shí)使用類型聲明,它們必須與本文檔中描述的簽名相同,否則會(huì)發(fā)出致命錯(cuò)誤。 在 PHP 8.0.0 之前,不會(huì)發(fā)出診斷信息。 然而, __construct() 和 __destruct() 不能聲明返回類型, 否則會(huì)發(fā)出致命錯(cuò)誤。
魔術(shù)方法包括:
1. __construct(),類的構(gòu)造函數(shù)
2. __destruct(),類的析構(gòu)函數(shù)
3. __call(),在對(duì)象中調(diào)用一個(gè)不可訪問方法時(shí)調(diào)用
4. __callStatic(),用靜態(tài)方式中調(diào)用一個(gè)不可訪問方法時(shí)調(diào)用
5. __get(),獲得一個(gè)類的成員變量時(shí)調(diào)用
6. __set(),設(shè)置一個(gè)類的成員變量時(shí)調(diào)用
7. __isset(),當(dāng)對(duì)不可訪問屬性調(diào)用isset()或empty()時(shí)調(diào)用
8. __unset(),當(dāng)對(duì)不可訪問屬性調(diào)用unset()時(shí)被調(diào)用。
9. __sleep(),執(zhí)行serialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)
10. __wakeup(),執(zhí)行unserialize()時(shí),先會(huì)調(diào)用這個(gè)函數(shù)
11. __toString(),類被當(dāng)成字符串時(shí)的回應(yīng)方法
12. __invoke(),調(diào)用函數(shù)的方式調(diào)用一個(gè)對(duì)象時(shí)的回應(yīng)方法
13. __set_state(),調(diào)用var_export()導(dǎo)出類時(shí),此靜態(tài)方法會(huì)被調(diào)用。
14. __clone(),當(dāng)對(duì)象復(fù)制完成時(shí)調(diào)用
15. __autoload(),嘗試加載未定義的類
16. __debugInfo(),打印所需調(diào)試信息
原文鏈接:https://www.dianjilingqu.com/441165.html