Primordial des constantes de classe vs propriétés

Je voudrais mieux comprendre pourquoi, dans le scénario ci-dessous, il y a une différence dans la façon dont les constantes de classe sont hérités vs 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();

De sortie:

TWO
TWO
ONE
TWO

Dans le code ci-dessus, ChildClass ne dispose pas d'un showTest() la méthode, de sorte que le Myclass showTest() la méthode utilisée par l'héritage. Les résultats montrent que la méthode est en cours d'exécution sur le Myclass, le Myclass version de la constante d'ESSAI est en cours d'évaluation, alors que parce que c'est de l'évaluation au sein de l'ChildClass contexte via l'héritage, la ChildClass membre de la variable $test est en cours d'évaluation.

J'ai lu la documentation, mais n'arrive pas à voir de toute mention de cette nuance. Quelqu'un peut jeter un peu de lumière pour moi?

  • WTF? Constante primordial!? Ne faites pas ça! jamais!!!!
  • En effet. Quelqu'un doit le communiquer à tous les développeurs de PHP. Ou au moins permettre à final...
InformationsquelleAutor Tom Auger | 2012-11-28