如何检查ReflectionProperty是否可访问?

时间:2017-10-20 22:31:39

标签: php reflection

有没有办法检查我是否已将ReflectionProperty设置为可访问?

class Foo {
    private   $baz  = 'bar';
}

$foo = new Foo();

$prop = new ReflectionProperty($foo, 'baz');
$prop->setAccessible(true);

在设置辅助功能之前和之后,执行$prop->isPrivate();将返回true(如预期的那样)。有没有办法告诉我已经将可访问性设置为true?

documentation在ReflectionProperty类中没有显示类似$accessible属性的内容,因此我不确定它是如何使其可访问的,除非它在Foo类上完成

1 个答案:

答案 0 :(得分:0)

您可以在try-catch块中使用以下方法:

ReflectionProperty::getValue 
  

如果属性不可访问,则抛出ReflectionException。您可以   使用可以访问受保护或私人财产   ReflectionProperty :: setAccessible()。

文档链接:
http://php.net/manual/en/reflectionproperty.getvalue.php

代码:

function isPropertyAccessible($property){
     $result = true;
     try{
        ReflectionProperty::getValue($property);
    }
    catch(ReflectionException $e){
       $result = false;
    }
       return $result;
    }