當(dāng)前位置:
首頁 >
php中的魔术函数以及魔术常量
發(fā)布時(shí)間:2025/3/21
67
豆豆
生活随笔
收集整理的這篇文章主要介紹了
php中的魔术函数以及魔术常量
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
魔術(shù)方法:
PHP把類中所有以__(兩個(gè)下劃線)開頭的方法當(dāng)成魔術(shù)方法,一般建議用戶不要將自定義的方法前面加上__作為前綴。魔術(shù)方法:
1. __construct()
類的默認(rèn)構(gòu)造方法,如果__construct()和與類同名的方法共同出現(xiàn)時(shí),默認(rèn)調(diào)用__construct()而不是同類名方法。一般情況下用戶自定義構(gòu)造方法也會使用__construct()。
2. __destruct()
類的析構(gòu)函數(shù),當(dāng)該對象的所有引用都被刪除,或者對象被顯式銷毀時(shí)執(zhí)行。
3. __get($name)
可以簡單歸納為:用$object->a的方式讀取對象的屬性時(shí),如果屬性a存在且是public型,那么直接返回該屬性的值;如果屬性a不存在或者是protected/private這樣的不可直接訪問的類型,就會調(diào)用__get($name)方法并以返回值為準(zhǔn)。一般可以使用該方法使外部可限制性地訪問內(nèi)部屬性,或者完成類似java中的反射操作。
4. __set($name, $value)
與__get($name)類似,用$object->a = 17的方式給屬性賦值時(shí),如果屬性a存在且是public型,那么直接給屬性a賦值皆可;如果屬性a不存在或者是protected/private型,就會調(diào)用__set($name, $value)方法。
5. __call($name, $arguments) / __callStatic($name, $arguments)
當(dāng)調(diào)用不存在或者不可訪問的方法時(shí),會調(diào)用__call($name, $arguments)方法。而當(dāng)在靜態(tài)方法中調(diào)用不存在或者不可訪問的方法時(shí),會調(diào)用__callStatic($name, $arguments)方法。
6. __toString()
當(dāng)打印對象時(shí)會被直接調(diào)用。如echo $object;
7. __clone()
當(dāng)對象被拷貝時(shí)直接調(diào)用。如$a = new Action(); $a = $object;
8. __isset($name) / __unset($name)
對不存在或者不可訪問的屬性使用isset()或者empty()時(shí),__isset()會被調(diào)用;當(dāng)unset一個(gè)不存在或者不可訪問的屬性時(shí),__unset()會被調(diào)用,否則直接unset該屬性皆可。
9. __set_state()
用var_export()輸出一個(gè)對象時(shí),__set_state()會被調(diào)用,輸出內(nèi)容以該魔術(shù)方法的返回值為準(zhǔn)。注:var_export()和var_dump()類似,只是var_export()輸出的內(nèi)容符合php語法。 注意使用方法:
10. __autoload($name)
實(shí)例化一個(gè)對象時(shí),如果對應(yīng)的類不存在,則該方法被調(diào)用。注意:該方法是全局函數(shù),參數(shù)是類的名稱。
11. __sleep() / __wakup()
略。
魔術(shù)常量:
1. __LINE__
返回文件中的當(dāng)前行號。
2. __FILE__
返回所在文件的完整路徑。
3. __FUNCTION__
返回所在函數(shù)名稱。
4. __CLASS__
返回所在類的名稱。
5. __METHOD__
返回所在類方法的名稱。需要注意__METHOD__返回的是"class::function"的形式,而__FUNCTION__則返回"function"的形式。
PHP把類中所有以__(兩個(gè)下劃線)開頭的方法當(dāng)成魔術(shù)方法,一般建議用戶不要將自定義的方法前面加上__作為前綴。魔術(shù)方法:
1. __construct()
類的默認(rèn)構(gòu)造方法,如果__construct()和與類同名的方法共同出現(xiàn)時(shí),默認(rèn)調(diào)用__construct()而不是同類名方法。一般情況下用戶自定義構(gòu)造方法也會使用__construct()。
2. __destruct()
類的析構(gòu)函數(shù),當(dāng)該對象的所有引用都被刪除,或者對象被顯式銷毀時(shí)執(zhí)行。
3. __get($name)
可以簡單歸納為:用$object->a的方式讀取對象的屬性時(shí),如果屬性a存在且是public型,那么直接返回該屬性的值;如果屬性a不存在或者是protected/private這樣的不可直接訪問的類型,就會調(diào)用__get($name)方法并以返回值為準(zhǔn)。一般可以使用該方法使外部可限制性地訪問內(nèi)部屬性,或者完成類似java中的反射操作。
4. __set($name, $value)
與__get($name)類似,用$object->a = 17的方式給屬性賦值時(shí),如果屬性a存在且是public型,那么直接給屬性a賦值皆可;如果屬性a不存在或者是protected/private型,就會調(diào)用__set($name, $value)方法。
5. __call($name, $arguments) / __callStatic($name, $arguments)
當(dāng)調(diào)用不存在或者不可訪問的方法時(shí),會調(diào)用__call($name, $arguments)方法。而當(dāng)在靜態(tài)方法中調(diào)用不存在或者不可訪問的方法時(shí),會調(diào)用__callStatic($name, $arguments)方法。
6. __toString()
當(dāng)打印對象時(shí)會被直接調(diào)用。如echo $object;
7. __clone()
當(dāng)對象被拷貝時(shí)直接調(diào)用。如$a = new Action(); $a = $object;
8. __isset($name) / __unset($name)
對不存在或者不可訪問的屬性使用isset()或者empty()時(shí),__isset()會被調(diào)用;當(dāng)unset一個(gè)不存在或者不可訪問的屬性時(shí),__unset()會被調(diào)用,否則直接unset該屬性皆可。
9. __set_state()
用var_export()輸出一個(gè)對象時(shí),__set_state()會被調(diào)用,輸出內(nèi)容以該魔術(shù)方法的返回值為準(zhǔn)。注:var_export()和var_dump()類似,只是var_export()輸出的內(nèi)容符合php語法。 注意使用方法:
$test = new Test();
$b = var_export($test, true);
var_dump($b);
class Test {
??? public $a;
??? public static function __set_state($array) {
??????? $ab = new Test();
??????? $ab->a = 10;
??????? return $ab;
??? }
}
10. __autoload($name)
實(shí)例化一個(gè)對象時(shí),如果對應(yīng)的類不存在,則該方法被調(diào)用。注意:該方法是全局函數(shù),參數(shù)是類的名稱。
11. __sleep() / __wakup()
略。
魔術(shù)常量:
1. __LINE__
返回文件中的當(dāng)前行號。
2. __FILE__
返回所在文件的完整路徑。
3. __FUNCTION__
返回所在函數(shù)名稱。
4. __CLASS__
返回所在類的名稱。
5. __METHOD__
返回所在類方法的名稱。需要注意__METHOD__返回的是"class::function"的形式,而__FUNCTION__則返回"function"的形式。
總結(jié)
以上是生活随笔為你收集整理的php中的魔术函数以及魔术常量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: var_export
- 下一篇: php中的转义字符