基类不允许访问私有成员?

时间:2013-07-19 07:09:57

标签: php oop inheritance

我可以发誓,在标准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;

上面的代码片段抛出Fatal error: Cannot access private property Concrete::$name on line 5。如果我将$name的访问级别更改为protected,则此方法有效。

Demo

3 个答案:

答案 0 :(得分:3)

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

来自PHP-Docs:

  

可以通过在声明前加上关键字public,protected或private来定义属性或方法的可见性。声明为public的类成员可以随处访问。声明受保护的成员只能在类本身以及继承和父类中访问。 声明为私有的成员只能由定义该成员的类访问。

答案 1 :(得分:2)

确切地说,私人是完全私人的(我的日常日记)甚至家庭成员都无法访问。受保护的只是受到保护(我的车)来自世界其他地方,但家人可以进入。

答案 2 :(得分:1)

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