Ü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?