我尝试学习继承在PHP中。一个问题,我不能得到它。我有一个块代码如下:
class BaseClass {
private $name = "BaseClass";
public function getName() {
echo $this->name;
}
}
class ChildClass extends BaseClass {
private $name = "ChildClass";
}
$ob = new ChildClass;
echo $ob->getName(); //result: "BaseClass" . I think its result is "ChildClass".
但是,将**$name的可见性更改为public**时,结果不同。
class BaseClass {
public $name = "BaseClass";
public function getName() {
echo $this->name;
}
}
class ChildClass extends BaseClass {
public $name = "ChildClass";
}
$ob = new ChildClass;
echo $ob->getName(); // Result: "ChildClass".
请帮我解释一下这个问题。谢谢!
1条答案
按热度按时间lhcgjxsq1#
我想,这样做的原因是私有属性没有被覆盖,而是形成了两个属性。如果你把
private
改为protected
,它就会工作。当你调用
getName()
方法时,你的作用域是父方法的作用域,因为它不存在于子方法中。在你的例子中,private $name
存在两次。并且由于作用域,你将得到parent属性的值($this
将尝试从同一个作用域调用私有方法)。如果你运行
var_dump($ob)
,你就会明白我的意思:如果您覆盖了子类中的父方法,则当您更改范围时,结果也将起作用。
希望能有所帮助。