PHP受保护和私有属性?

时间:2014-09-09 20:35:56

标签: php object private protected

我在PHP中有一个类,在创建实例时会将自身的实例作为参数。该课程的模拟如下。

abstract class AAA {

    protected $_a;
    protected $_b;

    public function __construct($a, $b) {

         $this->_a = $a;
         $this->_b = $b;
    }
}

class BBB extends AAA {

    private $_aaa;

    public function __construct($a, $b, AAA $aaa) {

        parent::__construct($a, $b);
        $this->_aaa = $aaa;
    }
}

BBB的方法中,我可以完全访问$aaa的受保护属性。下面是一个例子。

# BBB method
public function getAAAprotected() {

    return array(
        '_a' => $this->_aaa->_a,
        '_b' => $this->_aaa->_b,
    );
}

我很困惑这是怎么回事。我对protected属性的理解是它们只能被该实例中的扩展类访问,或者我一直都错了。

有人可以解释一下,或给出指示,这样我就可以完全理解protected / private方法/功能何时才是这样?

1 个答案:

答案 0 :(得分:2)

  

相同类型的对象可以私密访问彼此   受保护的成员,即使它们不是相同的实例。这是   因为实现具体细节已经知道了   在那些物体里面。

http://php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects