我有一类具有公共(public),公共(public)静态,私有(private)和私有(private)静态属性的类,而我试图仅获取公共(public)属性。我尝试由于某种原因无法正确使用过滤器,

ReflectionProperty::IS_PUBLIC & ~ReflectionProperty::IS_STATIC

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

除其他事项外,要么我一直获得静态公共(public)资源,要么就获得私有(private)静态资源。

最佳答案

您将需要查询所有公共(public)对象,然后像这样过滤掉公共(public)静态对象:

$ro = new ReflectionObject($obj);

$publics = array_filter(
    $ro->getProperties(ReflectionProperty::IS_PUBLIC),
    function(ReflectionProperty $prop) {
        return !$prop->isStatic();
    }
);

10-06 09:14