Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1080 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP5 : Héritage et variables statiques ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP5 : Héritage et variables statiques ?

n°1541190
ZeBrian
Posté le 11-04-2007 à 11:13:14  profilanswer
 

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 :

Code :
  1. class Papa {
  2. protected static $variable_genante = 'Papa';
  3. public function affiche () {
  4.  echo self::$variable_genante;
  5. }
  6. }
  7. class Fiston extends Papa {
  8. protected static $variable_genante = 'Fiston';
  9. }
  10. $t = new Fiston;
  11. $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, 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 ? :D  
 
Merci d'avance pour vos réactions !

mood
Publicité
Posté le 11-04-2007 à 11:13:14  profilanswer
 

n°1541247
soju
One shot !
Posté le 11-04-2007 à 12:53:35  profilanswer
 

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() ?

n°1541252
ZeBrian
Posté le 11-04-2007 à 12:55:27  profilanswer
 

En effet, c'est ce que je pense faire...
 
Apparemment, PHP5 a encore quelques lacunes niveau objet, dont celle-ci !


Message édité par ZeBrian le 11-04-2007 à 12:56:20
n°1541842
leflos5
On est ou on est pas :)
Posté le 12-04-2007 à 11:13:11  profilanswer
 

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 :
  1. class Papa {
  2.           protected static $variable_genante = 'Papa';
  3.           public function affiche () {
  4.                  $class=get_class($this);
  5.                  eval("\$var=$class::\$variable_genante;" );
  6.                  echo $var;
  7.           }
  8.       }
  9.       class Fiston extends Papa {
  10.           protected static $variable_genante = 'Fiston';
  11.       }
  12. $t = new Fiston;
  13. $t -> affiche();

n°1541846
ZeBrian
Posté le 12-04-2007 à 11:14:50  profilanswer
 

Merci leflos5, j'avais justement trouvé une solution très similaire mais j'avais la flemme de l'expliquer :D

n°1541892
rufo
Pas me confondre avec Lycos!
Posté le 12-04-2007 à 11:58:07  profilanswer
 

et à la place du eval, ${$class}::$variable_genante; ça marcherait?

n°1541900
ZeBrian
Posté le 12-04-2007 à 12:01:27  profilanswer
 

Malheureusement non, après une multitude d'essais, on ne peut pas utiliser une chaîne pour désigner le nom d'une classe !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP5 : Héritage et variables statiques ?

 

Sujets relatifs
Récupérer des variables de mySql pour flashMoteur de template simple pour php5
problème avec php5Libraries statiques et dynamiques
[résolu] Variables dynamiques dans des classes[merise] Probleme d'heritage, MCD et sgbd mysql..
[PHP] Transfert de variablesAfficher variables chiffres avec 0B800h?
Problème avec un fichier externe pour mes variablesapplet java et recuperation des variables de session
Plus de sujets relatifs à : PHP5 : Héritage et variables statiques ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR