Bonjour,
j'essaye de faire une chose qui me semble pas incroyable mais je crois que mes réflexes java ne me permettent pas de trouver la solution (et mes recherches web ne donnent pas grand chose).
J'ai une classe abstraite A, et une classe B qui hérite cette classe A. Dans les deux j'ai un attribut statique. J'aimerais que quand j'appelle une méthode sur un objet A (méthode héritée de B) ça me donne l'attribut de A, pas celui de B.
Mais je en vois pas comment faire :-/
Un exemple :
Je me serais attendu à "456", même si le self:: fait effectivement son travail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 abstract class A { public static $myVar = 123; public static function test() { echo self::$myVar; } } class B extends A { public static $myVar = 456; } $b = new B; $b->test(); // Affiche "123", j'aimerais avoir "456"
J'ai donc cherché d'autres solutions :
Ca fonctionne mais c'est pas ce qu'il y a de plus propre. Y-a-t-il d'autres solutions?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 abstract class A { public static $myVar = 123; public static $myClass; public function __construct($class){ self::$myClass = $class; } public static function test() { eval( "\$g = " . self::$myClass . "::\$myVar;" ); echo $g; } } class B extends A { public static $myVar = 456; public function __construct(){ parent::__construct(__CLASS__); } } $b = new B; $b->test();
(j'ai vu que PHP 5.3 proposera qqes améliorations de ce coté, mais en attendant au moins).
Partager