V0r_X Posté 19 Octobre 2006 Posté 19 Octobre 2006 (modifié) Bonjour à tous, Je suis devant un problème qui m' 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é 19 Octobre 2006 par V0r_X
dièse Posté 20 Octobre 2006 Posté 20 Octobre 2006 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 Posté 20 Octobre 2006 Auteur Posté 20 Octobre 2006 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.
V0r_X Posté 20 Octobre 2006 Auteur Posté 20 Octobre 2006 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 Posté 20 Octobre 2006 Posté 20 Octobre 2006 (modifié) Bon j'ai testé tout fonctionne parfaitement. Tu as des erreurs dans le code que tu as copié: class maClasse2 extends maClasse1class 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é 20 Octobre 2006 par dièse
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant