PHP5 : Héritage et variables statiques ? - PHP - Programmation
Marsh Posté le 11-04-2007 à 12:53:35
ZeBrian a écrit : L'autre solution serait de réécrire la fonction affiche() mot pour mot dans Fiston, mais là aussi ce serait bien moche, car en réalité, elle est de taille conséquente et Fiston n'est pas la seule classe héritant de Papa... |
tu peux peut être réécrire juste une partie puis appeler parent::affiche() ?
Marsh Posté le 11-04-2007 à 12:55:27
En effet, c'est ce que je pense faire...
Apparemment, PHP5 a encore quelques lacunes niveau objet, dont celle-ci !
Marsh Posté le 12-04-2007 à 11:13:11
C'est tout à fait normal !
http://fr.php.net/manual/fr/language.oop5.static.php
Pour contourner ça, y'a peut être plus propre mais là je vois que ça:
Code :
|
Marsh Posté le 12-04-2007 à 11:14:50
Merci leflos5, j'avais justement trouvé une solution très similaire mais j'avais la flemme de l'expliquer
Marsh Posté le 12-04-2007 à 11:58:07
et à la place du eval, ${$class}::$variable_genante; ça marcherait?
Marsh Posté le 12-04-2007 à 12:01:27
Malheureusement non, après une multitude d'essais, on ne peut pas utiliser une chaîne pour désigner le nom d'une classe !
Marsh Posté le 11-04-2007 à 11:13:14
Bonjour,
Ne m'étant lancé que récemment dans les fonctionnalités objet de PHP5, j'y découvre de nombreux atouts mais forcément, je me vois confronté à quelques hics... En voici donc un qui m'importune particulièrement !
Tout d'abord, le code :
Ce code affiche "Papa" alors que j'aurais beaucoup apprécié qu'il m'affiche poliment "Fiston"... Bien sûr, je me doute que l'erreur est due à l'utilisation du mot clef "self" dans la classe Papa, qui n'est pas réinterprété lors de l'héritage et qui désigne donc toujours la classe "Papa" lors de l'appel à la fonction affiche() depuis une instance de Fiston !
Je pourrais parfaitement contourner ce problème en utilisant des variables non statiques, sauf qu'éthiquement parlant, ça me fait mal au coeur : en effet, ces variables ont pour vocation de ne pas être instanciées puisqu'elles dépendent uniquement de la classe !
L'autre solution serait de réécrire la fonction affiche() mot pour mot dans Fiston, mais là aussi ce serait bien moche, car en réalité, elle est de taille conséquente et Fiston n'est pas la seule classe héritant de Papa...
J'en viens donc à ma question : comment faire ?
Merci d'avance pour vos réactions !