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 :

Héritage & propriétées enfants [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Héritage & propriétées enfants
    Bonjour,

    Voici un extrait de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class _model
    {
    	public static function InitValue($key, $value)
    	{
    		self::$$key = $value;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Access extends _model
    {
    	static protected $allow_all = true;
    	static protected $ip_allow = array();
    	static protected $users_allow = array();
    	static protected $access_granted = false;
     
    	...
    }
    Comment faire pour que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Access::InitValue('allow_all', false);
    modifie la propriété allow_all de Access ?

    Actellement, ce code retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Access to undeclared static property: _model::$allow_all
    Toute aide est la bienvenue.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Points : 392
    Points
    392
    Par défaut
    t'es sur du $$key
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self::$$key = $value;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Oui, c'est du nommage de variable dynamique.
    Si $key vaut 'allow_all', alors $$key équivaut à $allow_all.


    Le problème se situe au niveau du self qui ne désigne pas la bonne classe;

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Points : 392
    Points
    392
    Par défaut
    et si dans le constructeur de la classe dérivée tu appelle explicitement le constructeur du parent? parent::

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    A la place de self ?
    Si oui, ca ne marche pas, il me répond qu'il n'a pas de parent.

    self fait référence à _model mais moi, je cherche à se qu'il fasse référence à Access.

    Il n'y a pas réellement de constructeur pour ces classes étant donnée qu'elles sont justement en static pour ne pas avoir à être instanciées.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Points : 392
    Points
    392
    Par défaut
    La conception est un peu étrange.
    Si tu ne veux pas d'intanciation passe par une definition d'interface ou abstraite?
    Si c'est une variable de classe, et donc s'il est statique (appel de la methode de classe) elle ne doit pas être redefinissable à l'exécution (peut être)? donc le $$key en static n'as peut être pas de sens? ..

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Tant pis, je me sépare de l'héritage le temps de trouver un autre moyen que d'incorporer à la main cette méthode dans toutes les classes qui doivent être configurées à la volée.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Ce n'est donc pas possible, il faut forcement instancier une partie de la classe, même si c'est elle qui s'instancie toute seule ...

  9. #9
    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
    Jetes un oeil du coté de LSB <<< Late Satatic Binding >>> si tu es bien en php6

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Il suffit donc simplement de changer self:: par static::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class _model
    {
    	public static function InitValue($key, $value)
    	{
    		static::$$key = $value;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Access extends _model
    {
    	protected static $allow_all = true;
    	protected static $ip_allow = array();
    	protected static $users_allow = array();
    	protected static $access_granted = false;
     
    	...
    }
    Merci beaucoup à toi kaymak

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

Discussions similaires

  1. Héritage de propriétés
    Par Deaf dans le forum Maven
    Réponses: 0
    Dernier message: 08/03/2010, 10h28
  2. [as 2]Atteindre une propriété enfant ou parent.
    Par NejNej dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 04/01/2010, 15h13
  3. Héritage et propriété
    Par sylverspoon dans le forum Langage
    Réponses: 9
    Dernier message: 19/12/2009, 12h43
  4. Méthode Eval avec propriétés enfants
    Par kunfuka dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/12/2008, 12h28
  5. Réponses: 7
    Dernier message: 17/07/2007, 16h13

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