我在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
方法/功能何时才是这样?
答案 0 :(得分:2)
相同类型的对象可以私密访问彼此 受保护的成员,即使它们不是相同的实例。这是 因为实现具体细节已经知道了 在那些物体里面。
http://php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects