1

我可以发誓,在标准 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. 如果我将访问级别更改为$nameto ,它会起作用protected

演示

4

3 回答 3

3

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

来自 PHP 文档:

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

于 2013-07-19T07:13:02.587 回答
2

确切地说,私人是完全私人的(我的日常日记),即使是家人也无法访问。受保护的只是保护(我的汽车)不受世界其他地方的影响,但家人可以访问。

于 2013-07-19T07:13:22.560 回答
1

That is exactly the difference between private and protected. Only I can see private variables but my family can see protected.

于 2013-07-19T07:12:54.400 回答