Überschreiben von Klassenkonstanten gegen Eigenschaften

Ich möchte besser verstehen, warum es im folgenden Szenario einen Unterschied zwischen der Vererbung von Klassenkonstanten und Instanzvariablen gibt.

<?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();

Ausgabe:

TWO
TWO
ONE
TWO

Im obigen Code verfügt ChildClass nicht über eine showTest () -Methode, daher wird die showTest () -Methode von ParentClass bei der Vererbung verwendet. Die Ergebnisse zeigen, dass die ParentClass-Version der TEST-Konstante ausgewertet wird, da die Methode für die ParentClass ausgeführt wird, während die ChildClass-Mitgliedsvariable $ test ausgewertet wird, da sie im ChildClass-Kontext über die Vererbung ausgewertet wird.

Ich habe die Dokumentation gelesen, kann aber anscheinend keine Erwähnung dieser Nuance feststellen. Kann jemand etwas Licht für mich bringen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage