Salut,
J'ai un "petit" soucis avec 2 classes écrites en PHP5. Rien de très important, mais j'aimerais être sûr d'avoir bien compris
J'ai une première classe, qu'on va appeler A :
et une classe B, qui hérite de A :
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 class A { const CLASS_VERSION = "beta 1"; private $prop1; private $prop2; public function __construct() { // ... } public function get_version() { return self::CLASS_VERSION; } public function writeMe() { echo $this->prop1."<br />".$this->get_version(); } }
Je teste maintenant :
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 class B extends A { const CLASS_VERSION = "alpha 1.1"; private $prop3; public function __construct() { parent::__construct(); $this->prop3 = ""; } public function get_version() { return self::CLASS_VERSION; } public function writeMe() { parent::writeMe(); echo "<br />Je suis la classe B"; } }
Et c'est là que se pose mon problème, j'obtiens comme résultat la valeur de la propriété 1 ($prop1) suivie du numéro de version de la classe A (A::CLASS_VERSION) puis sur la ligne du dessous "Je suis la classe B".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 include("A.class.php"); include("B.class.php"); $test = new B(); $test->writeMe();
Ca me semble à la fois logique et illogique.
Ma variable est une instance de la classe B. J'appelle la méthode writeMe() qui fait appel à writeMe() de la classe mère A et :
- Affiche la valeur de $prop1 - ça c'est OK
- Affiche le numéro de version - là je ne comprends pas trop comment ça se passe
- Affiche le reste du texte - ça c'est OK
J'aimerais comprendre pourquoi j'obtiens le numéro de version de la classe mère (A), et non celle de la classe fille (B) alors que la méthode get_version() est surchargée dans B.
Suis-je donc obligé de réécrire toute la méthode writeMe() de la classe B pour obtenir le résultat voulu ?
Je ne sais pas si c'est très clair alors n'hésitez pas à me demander plus de détails
Merci !
Partager