具有以下的类层次:调用父类的子方法在PHP
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手册this comment的validate()
功能protected
,虽然我不完全理解为什么它在这方面的工作后,案件。
第二种解决方案是在父创建abstract protected
方法validate()
和在子覆盖它(这将是多余的)到第一溶液中作为子的protected
方法可以从父存取?!!
有人可以解释继承在这种情况下如何工作?
嗯,所以当我在代码中调用'$ child-> parse()'时,它会在父类中运行函数'parse'并且其中的$ $ this'将引用父类实例而不是子类? – Songo
只有一个实例,但从实例的角度来看,父类的私有方法根本不允许被调用。这是'private','protected'和'public'的确切目的和区别。 – Evert