static::methode() comportement étrange
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 :
Citation:
Fatal error: Call to undefined method Classe1::methodeClasseFille() in blabla\ClasseMere.php on line 86
Ci dessous du code plus concret
Code:
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(); |
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.
Merci d'avance pour votre aide