次のクラス階層を持つ:
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
2番目の解決策は、親でメソッドを作成し、validate()
それを子でオーバーライドすることです(これは冗長になります)protected
。子のメソッドは親からアクセスできるため、最初の解決策にオーバーライドしますか?!!
この場合、継承がどのように機能するかを誰かに説明してもらえますか?