国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP反射類ReflectionClass和ReflectionObject的使用方法

2024-09-04 11:46:53
字體:
來源:轉載
供稿:網友

PHP中的擴展反射類,該擴展用來分析php程序,導出或提取出關于類、方法、屬性、參數等的詳細信息,包括注釋。

看一個這樣的問題,php類的成員變量沒有在類中聲明,而是在函數中聲明,有什么不同?

  1. class test{ 
  2.     private $name
  3.     private $sex
  4.     function __construct(){ 
  5.         $this->aaa='aaa'
  6.     } 
  7.  
  8. $test=new test(); 
  9. //Vevb.com 
  10. $reflect=new ReflectionClass($test); 
  11. $pro=$reflect->getDefaultProperties(); 
  12. print_r($pro);//打印結果:Array ( [name] => [sex] => ) 
  13.  
  14. echo $test->aaa;//打印結果:aaa 

在這個test類中,聲明了兩個成員變量$name和$sex,但是在構造函數中,又聲明了一個變量$aaa,初始化類,使用反射類打印默認成員屬性只有聲明的兩個成員變量屬性,但是打印類的$aaa變量發現還是可以輸出結果。

請問類的成員變量不用聲明,在函數中聲明也是可以的嗎,有什么區別?

在你這個例子中,使用ReflectionClass是不恰當的,因為__construct只有在實例化class時,才會執行。

也就是說ReflectionClass更多的是反射類聲明時的結構,而不是類實例化后的結構,所以沒有輸出屬性aaa是正確,因為屬性aaa確實是(在類聲明時)不存在的。

那么怎么看屬性aaa呢,應該用ReflectionObject反射實例化后的結構,例如:

  1. <?php 
  2. class test{ 
  3.     private $name
  4.     private $sex
  5.     function __construct(){ 
  6.         $this->aaa='aaa'
  7.     } 
  8. $test=new test(); 
  9.  
  10. $reflect=new ReflectionObject($test); 
  11. $pro=$reflect->getProperties(); 
  12. print_r($pro); 

經過實例化以后,屬性aaa才會存在,這時你就能看到屬性aaa了,因為php是“動態”語言,所以可以類的成員變量不用聲明,在函數中聲明也是可以的。 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 钟祥市| 聂拉木县| 焉耆| 介休市| 清水河县| 健康| 武鸣县| 克东县| 巧家县| 罗城| 乐东| 通海县| 太保市| 临海市| 仙居县| 布尔津县| 灵石县| 襄樊市| 商都县| 金秀| 新巴尔虎左旗| 磐安县| 时尚| 思茅市| 碌曲县| 高密市| 峨边| 江西省| 万州区| 启东市| 贵港市| 内江市| 大方县| 扎囊县| 湘潭市| 勃利县| 施秉县| 高陵县| 宽甸| 定结县| 施秉县|