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 :
CODE
class Papa {
protected static $variable_genante = 'Papa';
public function affiche () {
echo self::$variable_genante;
}
}
class Fiston extends Papa {
protected static $variable_genante = 'Fiston';
}
$t = new Fiston;
$t -> affiche();
protected static $variable_genante = 'Papa';
public function affiche () {
echo self::$variable_genante;
}
}
class Fiston extends Papa {
protected static $variable_genante = 'Fiston';
}
$t = new Fiston;
$t -> affiche();
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...
J'en viens donc à ma question : comment faire ?
Merci d'avance pour vos réactions !