Aller au contenu

Surcharge d'attributs statiques


V0r_X

Sujets conseillés

Bonjour à tous,

Je suis devant un problème qui m' :mad2: 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 :

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 ?

Modifié par V0r_X
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

:wacko:

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

class maClasse2 extends maClasse1

class maClasse2 extends maClasse

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 ;). Parce que là je ne vois vraiment pas comment tu peux obtenir "toto" au lieu de "titi"...

Modifié par dièse
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...