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

來源:互聯網
上載者:User
PHP中的擴充反射類,該擴充用來分析php程式,匯出或提取出關於類、方法、屬性、參數等的詳細資料,包括注釋。
看一個這樣的問題,php類的成員變數沒有在類中聲明,而是在函數中聲明,有什麼不同?
複製代碼 代碼如下:

class test{
    private $name;
    private $sex;
    function __construct(){
        $this->aaa='aaa';
    }
}

$test=new test();

$reflect=new ReflectionClass($test);
$pro=$reflect->getDefaultProperties();
print_r($pro);//列印結果:Array ( [name] => [sex] => )

echo $test->aaa;//列印結果:aaa

在這個test類中,聲明了兩個成員變數$name和$sex,但是在建構函式中,又聲明了一個變數$aaa,初始化類,使用反射類列印預設成員屬性只有聲明的兩個成員變數屬性,但是列印類的$aaa變數發現還是可以輸出結果。
請問類的成員變數不用聲明,在函數中聲明也是可以的嗎,有什麼區別?
在你這個例子中,使用ReflectionClass是不恰當的,因為__construct只有在執行個體化class時,才會執行。
也就是說ReflectionClass更多的是反射類聲明時的結構,而不是類執行個體化後的結構,所以沒有輸出屬性aaa是正確,因為屬性aaa確實是(在類聲明時)不存在的。
那麼怎麼看屬性aaa呢,應該用ReflectionObject反射執行個體化後的結構,例如
複製代碼 代碼如下:

<?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);
 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.