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 :

magic __get() function depuis parent:: ?


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de paragoge
    Profil pro
    Inscrit en
    Février 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 115
    Points : 71
    Points
    71
    Par défaut magic __get() function depuis parent:: ?
    Pour compacter mon code, j'ai remplacé une longue liste de get, set function par la "magic" (l'irrationnel penètre même les languages de programmation!) function __get.
    au lieu de instance->my_method, j'appelle donc directement instance->my_property. Tout se passe bien...mais que faire quand j'appelle my_property depuis parent:: ?
    Avec parent::my_property je me reçois un beau
    Fatal error: Undefined class constant 'my_property' (alors que parent::my_method est ok)

    Est-ce un probleme de syntaxe ou bien est-il impossible d'appeler une property de la classe mère par le truchement de la magic function __get ?

    Merci pour votre éclairage!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Hello,

    pourquoi ne pas utiliser $this ?
    Le fait d'utiliser parent::, ne veut pas simplement dire que tu veux utiliser la méthode qui se situe dans la classe mere.
    Cette syntaxe implique aussi que si tu ré écris une méthode mere dans ta classe fille, cette syntaxe ignorera la méthode de ta classe fille.
    Alors $this le gère tout seul.

    a plus

  3. #3
    Membre régulier Avatar de paragoge
    Profil pro
    Inscrit en
    Février 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 115
    Points : 71
    Points
    71
    Par défaut
    Très interessant! avec $this ça fonctionne mais je ne comprends pas pourquoi!
    voilà la structure de mes classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class A {
    private $my_property;
     }
     
    class B extends A {
    public  function __construct() {
    parent::__construct();
    }
     
    class C extends B {
    public  function __construct() {
    parent::__construct();
    $this->my_property; // j'accède à my_property!?
    }
    Pourquoi $my_property est-elle accessible depuis $this dans la classe C alors que sa visibilité est private dans la classe A?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    hello,

    Oui ton exemple semble invalide du point de vue théorique.
    Surement un bug d'implémentation de php.
    Essais avec un version du moteur plus récente, ce bug? aura surement était corrigé.

    a plus

  5. #5
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Ton exemple est un peu bidon désolé

    Outre le fait qu'il manque des accolades et le constructeur de ta classe A, j'ai testé et cela ne marche pas

    Notice: Undefined property: C::$my_property in...

  6. #6
    Membre régulier Avatar de paragoge
    Profil pro
    Inscrit en
    Février 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 115
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par kaymak Voir le message
    hello,
    Oui ton exemple semble invalide du point de vue théorique.
    a plus
    Ouf! je suis rassuré! ça ne marche effectivement pas, car j'avais mal testé... J'ai donc changé la visibilité de my_property à protected et je peux donc utiliser le $this. OK.
    Merci

  7. #7
    Membre régulier Avatar de paragoge
    Profil pro
    Inscrit en
    Février 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 115
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    Ton exemple est un peu bidon désolé
    Non, non il ne faut pas être désolé, l'exemple n'est pas un peu bidon, il est très bidon...en apparence seulement, car je ne pouvais pas envoyer tout le contenu de chaque classe... le problème était un simple problème de visibilité d'une variable : pour récupérer une property dans une classe fille, il fallait simplement déclarer la visibilité de cette variable protected et non private...

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

Discussions similaires

  1. function depuis javascript avec variable
    Par cedp02 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/04/2014, 23h51
  2. Réponses: 1
    Dernier message: 15/05/2013, 13h33
  3. [Doctrine] Warning: class_parents() [function.class-parents]
    Par vincent.delvallee dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2011, 16h56
  4. [PHP 5.3] Connaitre nom classe enfant depuis parent
    Par Général03 dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2011, 17h18
  5. [POO] magic function __set/__get
    Par WG614 dans le forum Langage
    Réponses: 6
    Dernier message: 18/08/2008, 17h50

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