PHP反射類ReflectionClass和ReflectionObject的使用方法
更新時間:2013年11月13日 10:26:03 作者:
PHP反射類ReflectionClass和ReflectionObject
PHP中的擴(kuò)展反射類,該擴(kuò)展用來分析php程序,導(dǎo)出或提取出關(guān)于類、方法、屬性、參數(shù)等的詳細(xì)信息,包括注釋。
看一個這樣的問題,php類的成員變量沒有在類中聲明,而是在函數(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
在這個test類中,聲明了兩個成員變量$name和$sex,但是在構(gòu)造函數(shù)中,又聲明了一個變量$aaa,初始化類,使用反射類打印默認(rèn)成員屬性只有聲明的兩個成員變量屬性,但是打印類的$aaa變量發(fā)現(xiàn)還是可以輸出結(jié)果。
請問類的成員變量不用聲明,在函數(shù)中聲明也是可以的嗎,有什么區(qū)別?
在你這個例子中,使用ReflectionClass是不恰當(dāng)?shù)?,因為__construct只有在實例化class時,才會執(zhí)行。
也就是說ReflectionClass更多的是反射類聲明時的結(jié)構(gòu),而不是類實例化后的結(jié)構(gòu),所以沒有輸出屬性aaa是正確,因為屬性aaa確實是(在類聲明時)不存在的。
那么怎么看屬性aaa呢,應(yīng)該用ReflectionObject反射實例化后的結(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)過實例化以后,屬性aaa才會存在,這時你就能看到屬性aaa了
因為php是“動態(tài)”語言,所以可以類的成員變量不用聲明,在函數(shù)中聲明也是可以的。
看一個這樣的問題,php類的成員變量沒有在類中聲明,而是在函數(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
在這個test類中,聲明了兩個成員變量$name和$sex,但是在構(gòu)造函數(shù)中,又聲明了一個變量$aaa,初始化類,使用反射類打印默認(rèn)成員屬性只有聲明的兩個成員變量屬性,但是打印類的$aaa變量發(fā)現(xiàn)還是可以輸出結(jié)果。
請問類的成員變量不用聲明,在函數(shù)中聲明也是可以的嗎,有什么區(qū)別?
在你這個例子中,使用ReflectionClass是不恰當(dāng)?shù)?,因為__construct只有在實例化class時,才會執(zhí)行。
也就是說ReflectionClass更多的是反射類聲明時的結(jié)構(gòu),而不是類實例化后的結(jié)構(gòu),所以沒有輸出屬性aaa是正確,因為屬性aaa確實是(在類聲明時)不存在的。
那么怎么看屬性aaa呢,應(yīng)該用ReflectionObject反射實例化后的結(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)過實例化以后,屬性aaa才會存在,這時你就能看到屬性aaa了
因為php是“動態(tài)”語言,所以可以類的成員變量不用聲明,在函數(shù)中聲明也是可以的。
相關(guān)文章
PHP Socket網(wǎng)絡(luò)操作類定義與用法示例
這篇文章主要介紹了PHP Socket網(wǎng)絡(luò)操作類定義與用法,結(jié)合實例形式分析了php socket網(wǎng)絡(luò)操作類的定義及結(jié)合ajax發(fā)送查詢請求等相關(guān)使用技巧,需要的朋友可以參考下2017-08-08
php實現(xiàn)將上傳word文件轉(zhuǎn)為html的方法
這篇文章主要介紹了php實現(xiàn)將上傳word文件轉(zhuǎn)為html的方法,涉及php針對word文件操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
PHP實現(xiàn)微信掃碼登錄功能的兩種方式總結(jié)
這篇文章主要為大家介紹了利用PHP實現(xiàn)微信掃碼登錄功能的兩種方式,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定借鑒價值,需要的可以參考一下2022-08-08

