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 :
Fatal error: Call to undefined method Classe1::methodeClasseFille() in blabla\ClasseMere.php on line 86
Ci dessous du code plus concret
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();
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