Je voudrais mieux comprendre pourquoi, dans le scénario ci-dessous, il existe une différence dans la manière dont les constantes de classe sont héritées par rapport aux variables d'instance.
<?php
class ParentClass {
const TEST = "ONE";
protected $test = "ONE";
public function showTest(){
echo self::TEST;
echo $this->test;
}
}
class ChildClass extends ParentClass {
const TEST = "TWO";
protected $test = "TWO";
public function myTest(){
echo self::TEST;
echo $this->test;
}
}
$child = new ChildClass();
$child->myTest();
$child->showTest();
Production:
TWO
TWO
ONE
TWO
Dans le code ci-dessus, ChildClass n'a pas de méthode showTest (), donc la méthode ParentClass showTest () est utilisée par héritage. Les résultats montrent que, puisque la méthode s'exécute sur ParentClass, la version ParentClass de la constante TEST est en cours d'évaluation, alors que comme elle est évaluée dans le contexte ChildClass via l'héritage, la variable membre ChildClass $ test est en cours d'évaluation.
J'ai lu la documentation, mais je ne vois aucune mention de cette nuance. Quelqu'un peut-il m'éclairer?
final
...