Version complète: sur le forum Webmaster Hub : Surcharge d'attributs statiques
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
V0r_X
Bonjour à tous,

Je suis devant un problème qui m' mad2.gif depuis un moment :
Une de mes classes (je développe en PHP 5) possède des attributs statiques protégés (protected static $mavar = 'mavaleur').

Or, j'aimerais que les classes qui héritent de cette classe puissent modifier la valeur de ces attributs.

Mon idée de départ aurait été quelque chose comme ça :
CODE
class maClasse
{
    protected static $attrStatic1 = 'toto';
    protected static $attrStatic2 = 'tata';
    ...
}

class maClasse2 extends maClasse1
{
    protected static $attrStatic1 = 'titi';
    protected static $attrStatic2 = 'bidule';
    ...
}


Cette manière de faire ne fonctionne pas. En effet, les attributs de la classe fille ont encore la valeur de ceux de la classe mère.

Quelqu'un a-t-il déjà été confronté à ce problème ?
dièse
Bonjour,

Comment testes tu la valeur de tes attributs ? si tu crées une instance $maClasse2 et que dans une méthode de cette instance tu fais appel à self::$attrStatic1 tu accéderas bien à la valeur définie dans ta classe fille.
V0r_X
Salut, et merci de ta réponse,

En fait, pour être précis, et après avoir fait plus de tests, il s'avère qu'effectivement, une instance de maClasse2 accède bien aux valeurs voulues des attributs statiques.

En revanche, le problème reste entier en ce qui concerne des méthodes statiques. Voici un exemple :
CODE
class maClasse
{
    protected static $attrStatic1 = 'toto';
    protected static $attrStatic2 = 'tata';
    
    protected static function getAttrStatic1()
    {
        return self::$attrStatic1;
    }
}

class maClasse2 extends maClasse1
{
    protected static $attrStatic1 = 'titi';
    protected static $attrStatic2 = 'bidule';
    ...
    protected static function getAttrStatic1()
    {
        return self::$attrStatic1;
    }  
}

echo maClasse2::getAttrStatic1(); // M'affiche 'toto' au lieu de 'titi'


Comme tu le vois, j'ai bien essayé de surcharger la méthode getAttrStatic1(), mais rien n'y fait.
V0r_X
Après avoir bien épluché la doc PHP, il semblerait que les attributs et méthodes statiques ne puissent pas être surchargés lors de l'héritage.

J'ai lu ça dans un commentaire de la doc, alors il est possible que ce soit erroné. Si quelqu'un a déjà réussi à surcharger des attributs statiques, je suis preneur de la manière correcte de le faire.
dièse
wacko.gif

Bon j'ai testé tout fonctionne parfaitement. Tu as des erreurs dans le code que tu as copié:

CITATION
class maClasse2 extends maClasse1
class maClasse2 extends maClasse


CITATION
protected static function getAttrStatic1()
public static function getAttrStatic1()


Si ne nous donne pas exactement le code avec lequel tu travailles, on ne pourra pas t'aider à résoudre ton problème wink.gif. Parce que là je ne vois vraiment pas comment tu peux obtenir "toto" au lieu de "titi"...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.