【问题标题】:PHP protected and private properties?PHP 保护和私有属性?
【发布时间】:2014-11-03 09:05:49
【问题描述】:

我在 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的方法/函数什么时候是这样的?

【问题讨论】:

  • 哈哈 认真投票?为什么那些把一个看似简单的答案给自己看成一个毫无意义的问题的人。
  • 要么我需要睡觉,要么你只是回答了你自己的问题
  • 我不确定类中属性/方法的可见性是如何工作的。我想我没有回答。 :)

标签: php object private protected


【解决方案1】:

相同类型的对象可以互相访问私有和 受保护的成员,即使它们不是相同的实例。这是 因为实现的具体细节是已知的 在这些对象中。

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

【讨论】:

  • 非常感谢。很大的帮助。对我有很大帮助,我相信对其他人也会有帮助。
  • 不客气。随意将其标记为正确的。
  • 离我还剩 3 分钟。再次感谢您的帮助。
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2020-11-15
  • 2023-03-04
  • 1970-01-01
  • 2011-06-06
  • 2011-12-12
  • 2011-01-09
  • 2017-01-25
相关资源
最近更新 更多