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 :

[POO] Propriétés statiques non partagées par les classes filles [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut [POO] Propriétés statiques non partagées par les classes filles
    Bonjour,

    J'aimerai disposer de propriétés statiques qui ne soient pas partagées par les classes filles.

    Concrètement, avec le code suivant :
    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
    <?php
    class Foo
    {
      public static $_prop = null;
     
      public function __construct ()
      {
        self::$_prop = get_class ($this);
      }
     
      public function display ()
      {
        echo self::$_prop ."\n";
      }
    }
     
     
    class Bar extends Foo
    {
    }
     
    $foo = new Foo ();
    $foo->display ();
    $bar = new Bar ();
    $bar->display ();
    $foo->display ();
    J'obtiens :

    Alors que j'aimerai avoir :

    Une idée ?

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir,

    C'est un bug connu et corrige dans la version 5.3 de PHP. En effet il est maintenant possible d'utiliser le mot cle static pour faire reference a la classe fille (late static binding).

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    C'est un bug connu et corrige dans la version 5.3 de PHP. En effet il est maintenant possible d'utiliser le mot cle static pour faire reference a la classe fille (late static binding).
    Ok, merci je ne pensais pas que ça résoudrai mon problème.

    Par contre, comme ce n'est pas moi qui gère les version de PHP, est qu'il existe une solution en attendant ?

    Juste une idée en passant, il faudra que j'essaie demain, en utilisant un tableau qui indexe la valeur de la propriété avec le nom de la classe ?

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 305
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 305
    Points : 15 633
    Points
    15 633
    Par défaut
    Citation Envoyé par gege2061 Voir le message
    Par contre, comme ce n'est pas moi qui gère les version de PHP, est qu'il existe une solution en attendant ?
    regarde dans les notes des visiteurs il y a plein d'exemples de remplacement mais ça reste du bricolage qui s'éloigne beaucoup de la POO :
    http://php.net/language.oop5.late-st...ings#usernotes

  5. #5
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Pour info l'excellent tutoriel http://g-rossolini.developpez.com/tu...3/?page=poo#LI présente tout cela en détail

    ERE
    Quand une tête pense seule, elle devient folle.

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par mathieu Voir le message
    regarde dans les notes des visiteurs il y a plein d'exemples de remplacement
    Merci, j'ai réussi à faire ce que je voulais

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    class Foo
    {
      protected static $_prop = null;
     
      private function setStatic ($prop, $val)
      {
        $class = get_class ($this);
        eval ("$class::\$$prop = ". var_export ($val, true) .";");
      }
     
      private function getStatic ($prop)
      {
        $class = get_class ($this);
        eval ("\$var = $class::\$$prop;");
        return $var;
      }
     
      public function __construct ()
      {
        $this->setStatic ('_prop', get_class ($this));
      }
     
      public function display ()
      {
        echo $this->getStatic ('_prop');
      }
    }
     
     
    class Bar extends Foo
    {
      protected static $_prop = null;
    }
     
    $foo = new Foo ();
    $foo->display ();
    $bar = new Bar ();
    $bar->display ();
    $foo->display ();

    Citation Envoyé par mathieu Voir le message
    mais ça reste du bricolage qui s'éloigne beaucoup de la POO :
    http://php.net/language.oop5.late-st...ings#usernotes
    Du moment que l'héritage me cache tout ce bidouillage, c'est moins gênant que si mon application devait recalculer ces valeurs à chaque création d'instance (il s'agit de réflexion sur les champs de tables access...).


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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/08/2008, 15h37
  2. Réponses: 32
    Dernier message: 18/06/2007, 08h28
  3. Réponses: 11
    Dernier message: 20/10/2006, 17h50
  4. Objets partagés par les noeuds d'un cluster JBoss
    Par jbossdev dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 08/09/2006, 13h48

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