具有以下类层次结构:
class TheParent{
public function parse(){
$this->validate();
}
}
class TheChild extends TheParent{
private function validate(){
echo 'Valid!!';
}
}
$child= new TheChild();
$child->parse();
这将起作用的步骤顺序是什么?
问题是当我运行该代码时,它给出了以下错误:
Fatal error: Call to private method TheChild::validate() from context 'TheParent' on line 4
由于TheChild
继承自TheParent
不应该$this
调用parse()
引用的实例$child
,所以validate()
对parse()
?
注意:
在做了一些研究之后,我发现这个问题的解决方案要么根据PHP 手册中的这个注释validate()
来制作函数,虽然我不完全理解为什么它在这种情况下工作。 protected
第二种解决方案是在父项中创建一个abstract protected
方法validate()
并在子项中将其覆盖(这将是多余的)到第一个解决方案,因为protected
可以从父项访问子项的方法?!!
有人可以解释在这种情况下继承是如何工作的吗?