PHP反射類(lèi)ReflectionClass和ReflectionObject的使用方法
更新時(shí)間:2013年11月13日 10:26:03 作者:
PHP反射類(lèi)ReflectionClass和ReflectionObject
PHP中的擴(kuò)展反射類(lèi),該擴(kuò)展用來(lái)分析php程序,導(dǎo)出或提取出關(guān)于類(lèi)、方法、屬性、參數(shù)等的詳細(xì)信息,包括注釋。
看一個(gè)這樣的問(wèn)題,php類(lèi)的成員變量沒(méi)有在類(lèi)中聲明,而是在函數(shù)中聲明,有什么不同?
class test{
private $name;
private $sex;
function __construct(){
$this->aaa='aaa';
}
}
$test=new test();
$reflect=new ReflectionClass($test);
$pro=$reflect->getDefaultProperties();
print_r($pro);//打印結(jié)果:Array ( [name] => [sex] => )
echo $test->aaa;//打印結(jié)果:aaa
在這個(gè)test類(lèi)中,聲明了兩個(gè)成員變量$name和$sex,但是在構(gòu)造函數(shù)中,又聲明了一個(gè)變量$aaa,初始化類(lèi),使用反射類(lèi)打印默認(rèn)成員屬性只有聲明的兩個(gè)成員變量屬性,但是打印類(lèi)的$aaa變量發(fā)現(xiàn)還是可以輸出結(jié)果。
請(qǐng)問(wèn)類(lèi)的成員變量不用聲明,在函數(shù)中聲明也是可以的嗎,有什么區(qū)別?
在你這個(gè)例子中,使用ReflectionClass是不恰當(dāng)?shù)?,因?yàn)開(kāi)_construct只有在實(shí)例化class時(shí),才會(huì)執(zhí)行。
也就是說(shuō)ReflectionClass更多的是反射類(lèi)聲明時(shí)的結(jié)構(gòu),而不是類(lèi)實(shí)例化后的結(jié)構(gòu),所以沒(méi)有輸出屬性aaa是正確,因?yàn)閷傩詀aa確實(shí)是(在類(lèi)聲明時(shí))不存在的。
那么怎么看屬性aaa呢,應(yīng)該用ReflectionObject反射實(shí)例化后的結(jié)構(gòu),例如
<?php
class test{
private $name;
private $sex;
function __construct(){
$this->aaa='aaa';
}
}
$test=new test();
$reflect=new ReflectionObject($test);
$pro=$reflect->getProperties();
print_r($pro);
經(jīng)過(guò)實(shí)例化以后,屬性aaa才會(huì)存在,這時(shí)你就能看到屬性aaa了
因?yàn)閜hp是“動(dòng)態(tài)”語(yǔ)言,所以可以類(lèi)的成員變量不用聲明,在函數(shù)中聲明也是可以的。
看一個(gè)這樣的問(wèn)題,php類(lèi)的成員變量沒(méi)有在類(lèi)中聲明,而是在函數(shù)中聲明,有什么不同?
復(fù)制代碼 代碼如下:
class test{
private $name;
private $sex;
function __construct(){
$this->aaa='aaa';
}
}
$test=new test();
$reflect=new ReflectionClass($test);
$pro=$reflect->getDefaultProperties();
print_r($pro);//打印結(jié)果:Array ( [name] => [sex] => )
echo $test->aaa;//打印結(jié)果:aaa
在這個(gè)test類(lèi)中,聲明了兩個(gè)成員變量$name和$sex,但是在構(gòu)造函數(shù)中,又聲明了一個(gè)變量$aaa,初始化類(lèi),使用反射類(lèi)打印默認(rèn)成員屬性只有聲明的兩個(gè)成員變量屬性,但是打印類(lèi)的$aaa變量發(fā)現(xiàn)還是可以輸出結(jié)果。
請(qǐng)問(wèn)類(lèi)的成員變量不用聲明,在函數(shù)中聲明也是可以的嗎,有什么區(qū)別?
在你這個(gè)例子中,使用ReflectionClass是不恰當(dāng)?shù)?,因?yàn)開(kāi)_construct只有在實(shí)例化class時(shí),才會(huì)執(zhí)行。
也就是說(shuō)ReflectionClass更多的是反射類(lèi)聲明時(shí)的結(jié)構(gòu),而不是類(lèi)實(shí)例化后的結(jié)構(gòu),所以沒(méi)有輸出屬性aaa是正確,因?yàn)閷傩詀aa確實(shí)是(在類(lèi)聲明時(shí))不存在的。
那么怎么看屬性aaa呢,應(yīng)該用ReflectionObject反射實(shí)例化后的結(jié)構(gòu),例如
復(fù)制代碼 代碼如下:
<?php
class test{
private $name;
private $sex;
function __construct(){
$this->aaa='aaa';
}
}
$test=new test();
$reflect=new ReflectionObject($test);
$pro=$reflect->getProperties();
print_r($pro);
經(jīng)過(guò)實(shí)例化以后,屬性aaa才會(huì)存在,這時(shí)你就能看到屬性aaa了
因?yàn)閜hp是“動(dòng)態(tài)”語(yǔ)言,所以可以類(lèi)的成員變量不用聲明,在函數(shù)中聲明也是可以的。
您可能感興趣的文章:
- PHP的反射類(lèi)ReflectionClass、ReflectionMethod使用實(shí)例
- PHP反射機(jī)制原理與用法詳解
- PHP反射使用實(shí)例和PHP反射API的中文說(shuō)明
- PHP基于反射獲取一個(gè)類(lèi)中所有的方法
- PHP 反射機(jī)制實(shí)現(xiàn)動(dòng)態(tài)代理的代碼
- PHP反射機(jī)制用法實(shí)例
- php反射類(lèi)ReflectionClass用法分析
- PHP 反射(Reflection)使用實(shí)例
- PHP基于反射機(jī)制實(shí)現(xiàn)自動(dòng)依賴注入的方法詳解
- PHP反射原理與用法深入分析
相關(guān)文章
JS與PHP向函數(shù)傳遞可變參數(shù)的區(qū)別實(shí)例代碼
JS與PHP向函數(shù)傳遞可變參數(shù)的區(qū)別實(shí)例代碼,需要的朋友可以參考下。2011-05-05利用PHP函數(shù)計(jì)算中英文字符串長(zhǎng)度的方法
這篇文章主要介紹了利用PHP函數(shù)計(jì)算中英文字符串長(zhǎng)度的方法,實(shí)例對(duì)比了PHP函數(shù)實(shí)現(xiàn)方法與正則表達(dá)式的實(shí)現(xiàn)方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11jq的get傳參數(shù)在utf-8中亂碼問(wèn)題的解決php版
在php下用jquery傳參出現(xiàn)亂碼的解決方法2008-07-07php添加文章時(shí)生成靜態(tài)HTML文章的實(shí)現(xiàn)代碼
PHP生成靜態(tài)文章HTML,有批量的生成,但比較標(biāo)準(zhǔn)的應(yīng)該是在添加文章時(shí)就生成HTML文章,編輯時(shí)再重新生成HTML文章,刪除文章時(shí)同樣也樣刪除多余出來(lái)的HTML文章,這時(shí)批量生成就顯得有點(diǎn)力不從心了,下面就介紹一下PHP在添加文章時(shí)如何生成靜態(tài)的HTML文件2013-02-02PHP實(shí)現(xiàn)數(shù)據(jù)四舍五入的方法小結(jié)【4種方法】
這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)據(jù)四舍五入的方法,結(jié)合實(shí)例形式總結(jié)分析了php使用number_format()、round()、sprintf()格式化及intval()等函數(shù)實(shí)現(xiàn)數(shù)據(jù)四舍五入的4種操作方法,需要的朋友可以參考下2019-03-03PHP中空字符串介紹0、null、empty和false之間的關(guān)系
用PHP開(kāi)發(fā)那么久,PHP中空字符串、0、null、empty和false之間的關(guān)系總是有些不確定的東西。遇到它們應(yīng)該用哪個(gè)方法函數(shù)去處理2012-09-09回答PHPCHINA上的幾個(gè)問(wèn)題:URL映射
回答PHPCHINA上的幾個(gè)問(wèn)題:URL映射...2007-02-02