2015-10-19 89 views
-1

這是我的代碼:getStaticProperties返回繼承的類屬性

class A { 
    public static $a = '1'; 
} 
class B extends A { 
    public static $b = '2'; 
} 
$refclass = new ReflectionClass('B'); 
foreach ($refclass->getStaticProperties() as $key => $property) 
    echo $key; 

此代碼打印$ a和$ b。
有沒有辦法獲得類屬性而不會獲得繼承父類的屬性。

回答

1
foreach ($refclass->getStaticProperties() as $key => $property) 
    if ($refclass->getProperty($key)->getDeclaringClass() == $refclass) { 
     echo $key; 
    } 
} 

或者,也許更優雅:

$props = array_filter($refclass->getProperties(ReflectionProperty::IS_STATIC), function ($prop) use ($refclass) { 
    return $prop->getDeclaringClass() == $refclass; 
}); 
+0

你測試這一點,因爲我得到這個錯誤:「致命錯誤:調用一個成員函數getDeclaringClass()一個非對象」? – yuval

+0

我的不好,我認爲*'getStaticProperties'返回'ReflectionProperty []'像'getProperty'一樣...文檔沒有幫助和PHP不一致... :( – deceze

+0

感謝它的工作 – yuval