IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Late static binding avec static function et implements [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut Late static binding avec static function et implements
    Bonjour à tous,
    Comment faire pour savoir si une classe dérivée composée que de fonctions statiques implemente une interface spécifique quand la fonction appelée par la dérivée est localisée dans la classe parente.
    Je sais pas si c'est super clair, voilà un petit exemple bien plus parlant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    
    interface iTest { }
    
    class base {
    
    public static function create() {
    if (self instanceof iTest) echo 'iTest';
    }
    } class child extends base implements iTest { } child::create();
    Le problème se situe avec le self qui ne gère pas le LSB
    J'ai essayé avec get_called_class() mais là plus question d'objet juste une string. Et à chaque fois le test échoue child n'implémente pas iTest !

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Salut,

    Ne pourrais-tu pas utiliser le mot clé static : http://php.net/manual/en/language.oo...c-bindings.php (example #2).

    Je n'ai pas de php5.3 sous la main, donc pas de tests...

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Alors j'ai bien essayé avec static mais PHP m'envoie bouler : PHP Parse error: syntax error, unexpected T_INSTANCEOF, expecting T_PAAMAYIM_NEKUDOTAYIM

    Voili voilou,

    Je suis en train de voir si avec ReflectionClass il n'y aurait pas moyen de bidouiller
    Si tu as d'autres idées je suis preneur bien évidemment :-)

    J'ai essayé ça : plus de problèmes mais return __CLASS__ me renvoie une string

    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
     
     
    interface iTest { }
     
    class base {	
        public static function create() {
            $r = (static::self() instanceOf iTest);
            if ($r) echo 'iTest';
        }
    }
     
    class child extends base implements iTest { 
        public static function self() {
            return __CLASS__;
        }
    }
    Merci

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par Xysyo Voir le message
    expecting T_PAAMAYIM_NEKUDOTAYIM
    Tu as bien mis le double deux-points :: ?

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Et je n'ai peut-être pas assez précisé : personellement, j'essaierais un truc de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (static::get_class() == 'iTest') echo 'iTest';
    => il faut bien sûr oublier le instanceof car il n'y a aucune instance en appel statique

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    avec l'essai conseillé, j'obtient le nom de la classe child et rien concernant ses implémentations

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème late binding avec Word et Outlook
    Par sibama dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/12/2009, 21h24
  2. probleme avec static inline
    Par deubelte dans le forum C++
    Réponses: 22
    Dernier message: 07/06/2008, 14h27
  3. [POO] Probleme avec static et autoload
    Par laetyboop dans le forum Langage
    Réponses: 1
    Dernier message: 23/03/2006, 14h46
  4. Réponses: 6
    Dernier message: 25/01/2006, 14h19
  5. compilation avec -static
    Par vince3320 dans le forum C
    Réponses: 2
    Dernier message: 08/12/2005, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo