受保护成员的PHP OOP访问

时间:2015-12-06 08:37:36

标签: php oop

示例代码

class Example {

    protected $data = 'data ';

    public function getData() {
        return $this->data;
    }

    public function mergeWith(Example $e) {
        $this->data .= $e->data;
    }

}

$e1 = new Example();
$e2 = new Example();

$e1->mergeWith($e2);

结果是

Example Object
(
    [data:protected] => data data 
)

我的问题是 - 为什么我能够从对象外部访问对象的受保护/私有属性?它是同一个类,但它是一个不同的实例,不应该算作外部呼叫吗?这背后的想法是什么?

1 个答案:

答案 0 :(得分:1)

可见性是根据类层次结构定义的,而不是实例。因此protected被同一层次结构的所有实例访问。因此instaceof Example的任何对象都可以访问它。

在实现类似对象模型的几乎所有其他(?)编程语言中,它的工作方式相同。刚出头:C ++(有一些例外,但一般来说它仍适用于此),C#,Java。