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 :
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();
    }
}
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
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";
     }
}
Je teste maintenant :
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();
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".

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 !