使用getStaticProperties和getStaticPropertyValue ReflectionClass函数的静态var的可见性问题

时间:2019-02-09 11:12:56

标签: php

class RCE
{
    protected static $pri = 'Private static property';
    protected static $pro = 'Protected static property';
    public static $pub = 'Public static property';
}
$rce = new ReflectionClass('RCE');

//var_dump($rce->getStaticPropertyValue('pri')); //ReflectionException
//var_dump($rce->getStaticPropertyValue('pro')); //ReflectionException
var_dump($rce->getStaticPropertyValue('pub'));

在代码中,很明显,在当前上下文中,我无法访问私有或受保护的属性。没问题。我明白。

class RCE
{
    protected static $pri = 'Private static property';
    protected static $pro = 'Protected static property';
    public static $pub = 'Public static property';
}
$rce = new ReflectionClass('RCE');

var_dump($rce->getStaticProperties());

但是,在这段代码中,它也不应该为我提供私有或受保护的属性。 它确实显示了RCE类的所有静态属性(甚至是受保护的和私有的)。

所以,我的问题是,

  • 为什么getStaticProperties显示所有私有和受保护的内容,不是应该隐藏它吗??
  • 如果不是,那么为什么getStaticPropertyValue隐藏受保护的私有属性。不应该,显示所有getStaticProperies之类的属性吗?

并且,是否有任何手册可获取其文档,php的官方手册似乎尚未记录。

1 个答案:

答案 0 :(得分:0)

函数 getStaticProperties 返回类的静态属性。它所做的只是返回静态属性列表,您没有尝试访问它们

getStaticPropertyValue 调用不同。使用 getStaticPropertyValue ,您尝试访问的属性值受到保护。公共,受保护和私有注释旨在显示其具有的“访问权限”。但这你已经知道了。

在此处详细了解可见性: http://php.net/manual/en/language.oop5.visibility.php