我可以发誓,在标准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
,则此方法有效。
答案 0 :(得分:3)
private通常意味着它只能从类中访问。我认为这是预期的行为。
来自PHP-Docs:
可以通过在声明前加上关键字public,protected或private来定义属性或方法的可见性。声明为public的类成员可以随处访问。声明受保护的成员只能在类本身以及继承和父类中访问。 声明为私有的成员只能由定义该成员的类访问。
答案 1 :(得分:2)
确切地说,私人是完全私人的(我的日常日记)甚至家庭成员都无法访问。受保护的只是受到保护(我的车)来自世界其他地方,但家人可以进入。
答案 2 :(得分:1)
这正是私人和受保护之间的区别。只有我可以看到私人变量,但我的家人可以看到受保护的。