基类不允许访问私有成员


Base class not permitted to access private member?

我本可以发誓,在标准OOP中,您可以从基类中的方法访问具体类的私有成员。PHP只是以不同的方式实现了这一点,还是我做错了什么,或者我的理解完全错误了?

<?php
class Base {
  public function __toString() {
    return $this->name;
  }
}
class Concrete extends Base {
  private $name;
  public function __construct($name) {
    $this->name = $name;
  }
}
$o = new Concrete('foobar');
echo $o;

上面的代码片段抛出CCD_ 1。如果我将$name的访问级别更改为protected,它就会起作用。

演示

private通常意味着只能从类内访问它。我认为这是意料之中的行为。

从PHP文档:

属性或方法的可见性可以通过在声明前面加上关键字public、protected或private来定义。声明为公共的类成员可以在任何地方访问。被声明为受保护的成员只能在类本身内以及由继承类和父类访问声明为私有的成员只能由定义该成员的类访问

没错,私人是完全私人的(我的日常日记),即使是家庭成员也无法访问。保护就是保护(我的车)不受世界其他地方的影响,但家人可以进入。

这正是私有和受保护之间的区别。只有我可以看到私人变量,但我的家人可以看到受保护的变量。