为什么get_object_vars在静态方法中返回私有属性和受保护属性

时间:2017-12-06 09:50:12

标签: php static-methods access-modifiers

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中的错误吗?

0 个答案:

没有答案