Bonjour,
Cette question fait suite à la discussion acces-classe-fille-non-instanciee.
Suite à cette discussion, j'ai mis en pratique le static::method(). Cela fonctionne globalement bien, mis à part un cas que je ne comprend pas: J'expose ici un cas de synthèse qui selon moi représente bien le cas que je rencontre:
J'ai 3 classes: Classe1, ClasseMere et ClasseFille.
Bien entendu, ClasseFille est une sous Classe de ClasseMere.
Dans Classe1, une méthode methodeClasse1 appelle une methode statique de ClasseFille qui est définie dans ClasseMere : methodeClasseMere().
Cette même méthode fait appel (ou devrait faire appel) à une méthode statique de ClasseFille grace à static::methodeClasseFille().
Et là, c'est le drame car php m'explique que :
Ci dessous du code plus concretFatal error: Call to undefined method Classe1::methodeClasseFille() in blabla\ClasseMere.php on line 86
Je cherche à ce que methodeClasseMere appelle ClasseFille::MethodeClasseFille() et non Classe1::MethodeClasseFille(). Lorsque je lance un get_called_class() depuis methodeClasseMere, j'obtiens aussi Classe1. Donc, je ne comprend vraiment pas ce qui se passe. J'ai essayé d'aller voir sur http://php.net/manual/fr/language.oo...c-bindings.php. Je n'y ai pas trouvé le problème que j'évoque.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 abstract class ClasseMere { abstract static function methodeClasseFille(); function methodeClasseMere() { static::methodeClasseFille(); } } class ClasseFille extends ClasseMere { static function methodeClasseFille() { print("hello"); } } class Classe1 { function methodeClasse1() { ClasseFille::MethodeClasseMere(); } } $objet=new Classe1(); $objet->methodeClasse1();
Merci d'avance pour votre aide
Partager