Bonjour,
j'ai un petit soucis ou plutôt une incompréhension. Voici mes classes:
Mon problème est que je ne comprends pas le comportement de ce fragment de code
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
30
31
32
33
34
35
36 abstract class AMatch { protected $maskInitial; public function Init($a_init1, $a_init2) { //DEBUG echo "Class: ".get_class($this)." Mask:".$this->maskInitial; $this->_numeroTourEnCours++; //Traitement des initiales $this->TraiteInit($a_init1); } private function TraiteInit($a_init, $a_indiceEquipe=0) { echo "Méthode: TraitInit - AMatch"; } } class Match extends AMatch { public function __construct() {$this->maskInitial = "1-3";} } class Simulateur extends Match { public function __construct() {$this->maskInitial = "0-7";} private function TraiteInit($a_init, $a_indiceEquipe=0) { echo "Méthode: TraitInit - Simulateur"; } }
J'obtiens la sortie suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $toto = new Simulateur (); $toto->Init($array1, $array2);
Je ne comprends pas pourquoi on passe par la méthode TraitInit de Amatch plutôt que celle redéfinie dans Simulateur. D'autant plus qu'il voit bien this comme du type Simulateur et qu'il me sort bien la valeur de l'attribut Mask correspondant au Simulateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Class: Simulateur Mask: 0-7 Méthode: TraitInit - AMatch
Si je duplique la méthode Init dans Simulateur, le problème est résolu. Mais là c'est qu'un extrait de code. Dans le code réel j'ai ce cas à plusieurs reprise et il est difficilement concevable de dupliquer beaucoup de méthodes. Ça pose des problème de maintenance.
Quelqu'un a t'il une solution sans duplication de code pour le forcer à utiliser la "bonne" méthode ? D'avance merci.
Partager