Avoir la hiérarchie de classe suivante:appel d'une méthode d'enfant de la classe parente en PHP
class TheParent{
public function parse(){
$this->validate();
}
}
class TheChild extends TheParent{
private function validate(){
echo 'Valid!!';
}
}
$child= new TheChild();
$child->parse();
Quelle est la séquence d'étapes dans lesquelles cela va fonctionner?
Le problème est quand je courais ce code, il a donné l'erreur suivante:
Fatal error: Call to private method TheChild::validate() from context 'TheParent' on line 4
Depuis TheChild
Hérite de TheParent
ne doit pas $this
appelé parse()
se référer à l'instance de $child
, donc validate()
sera visible à parse()
?
Note:
Après avoir fait quelques recherches, je trouve que la solution à ce problème soit faire la fonction validate()
protected
selon this comment dans le manuel PHP, bien que je ne comprends pas bien pourquoi il travaille dans ce Cas.
La seconde solution consiste à créer un procédé abstract protected
validate()
dans le parent et le remplacer dans l'enfant (qui sera redondant) à la première solution comme protected
méthodes de l'enfant peuvent être accessibles à partir du parent? !! Est-ce que quelqu'un peut expliquer comment l'héritage fonctionne dans ce cas?
hmmm alors quand j'appelle '$ child-> parse()' dans mon code, il lancera la fonction 'parse' dans la classe parente et' $ this' dedans il se référera à l'instance de classe parente et non à l'enfant? – Songo
Il existe une seule instance, mais du point de vue de l'instance. Les méthodes privées des classes parentes ne peuvent tout simplement pas être appelées. C'est le but exact et la différence entre 'private',' protected' et 'public'. – Evert