Bonjour j'ai un problème que je ne comprend pas que voici exposé du mieux que je peux:
J'ai 4 classes que je vais nommer General, Arbre, Element1 et Element2
Element1 et Element2 sont en gros des éléments d'une structure arborescente, filles d'une classe Arbre, elle même fille d'une classe General.

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 General{
function coucou()  //coucou() n'est pas statique
{
return static::coucou;
}
}
class Arbre extends General {
function getLienCreeFils($type){
switch ($type){
case "Element1": return Element1::coucou();
break;
case "Element2": return Element2::coucou();
break;
}
}
}
class Element1 extends Arbre {
const coucou="coucou1";
}
class Element2 extends Arbre {
const coucou="coucou2";
}
Donc, j'ai le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$elem=new Element1();
$elem->getLienCreeFils("Element2");
J'aimerais recevoir comme réponse "Element1", mais je reçois "Element2".
Et j'avoue ne pas comprendre du tout la raison:
Ai-je raté quelque chose? Est-ce un bug php? Ai-je mal compris la notion de static:
Pour résoudre mon problème de manière temporaire, j'ai fait un truc horrible ci dessous (j'ai instancié la classe au lieu d'appeler la méthode statiquement, ce qui par un miraculeux hasard règle le problème), mais si vous pouviez m'aider à le résoudre de manière définitive, cela m'arrangerait.
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
 
class Arbre extends General
{
function getLienCreeFils($type)
{
<div style="margin-left:40px">switch ($type)
{
case "Element1": 
return Element1::coucou();
break;
case "Element2": 
$objetBidon=new Element2();
return $objetBidon->coucou();
//case "Element2": return Element2::coucou();
break;
}</div>}
}
Cordialement,
Marc