5

我有一个具有公共、公共静态、私有和私有静态属性的类,我试图只获取公共的。由于某种原因我无法正确使用过滤器,我试过了

ReflectionProperty::IS_PUBLIC & ~ReflectionProperty::IS_STATIC

或者

ReflectionProperty::IS_PUBLIC & (ReflectionProperty::IS_PUBLIC | ~ReflectionProperty::IS_STATIC)

除其他外,我要么不断获得静态公共或私有静态。

4

2 回答 2

3

您需要查询所有公众,然后像这样过滤公共静态数据:

$ro = new ReflectionObject($obj);

$publics = array_filter(
    $ro->getProperties(ReflectionProperty::IS_PUBLIC), 
    function(ReflectionProperty $prop) {
        return !$prop->isStatic();
    }
);
于 2013-04-03T10:22:32.117 回答
1

得到所有的公众和所有的静态然后得到它的相交:

class Test{
 public static $test1 = 'test1';
 private static $test2 = 'test2';
 public $test3 = 'test3';
}
$test = new Test();
$ro = new ReflectionObject($test);
$publics = $ro->getProperties(ReflectionProperty::IS_PUBLIC);
$statics = $ro->getProperties(ReflectionProperty::IS_STATIC);
var_export(array_diff($publics, $statics));

返回:

array ( 1 => ReflectionProperty::__set_state(array( 'name' => 'test3', 'class' => 'Test', )), )
于 2013-04-03T10:16:29.923 回答