get_object_vars
函数应该是作用域敏感的,因为它只返回它在当前作用域中可以访问的属性。
鉴于以下原始示例,为什么函数调用会返回所有三个属性,而不管它们的可见性如何?
<?php
class A
{
private $b = 'foo';
protected $c = 'bar';
public $d = 'baz';
public static function getPublicProperties(\A $object)
{
return get_object_vars($object);
}
}
$a = new \A();
var_dump(\A::getPublicProperties($a));
结果:
array(3) {
'b' =>
string(3) "foo"
'c' =>
string(3) "bar"
'd' =>
string(3) "baz"
}
getPublicProperties
方法是静态的,但是能够访问传入的对象的私有属性和受保护属性。这是PHP中的错误吗?