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的官方手册似乎尚未记录。
答案 0 :(得分:0)
函数 getStaticProperties 返回类的静态属性。它所做的只是返回静态属性列表,您没有尝试访问它们。
与 getStaticPropertyValue 调用不同。使用 getStaticPropertyValue ,您尝试访问的属性值受到保护。公共,受保护和私有注释旨在显示其具有的“访问权限”。但这你已经知道了。
在此处详细了解可见性: http://php.net/manual/en/language.oop5.visibility.php