Я хотел бы лучше понять, почему в приведенном ниже сценарии существует разница в том, как наследуются константы класса и переменные экземпляра.
<?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();
Вывод:
TWO
TWO
ONE
TWO
В приведенном выше коде ChildClass не имеет метода showTest(), поэтому метод наследования ParentClass showTest() используется наследованием. Результаты показывают, что, поскольку метод выполняется в ParentClass, оценивается версия константы TEST в ParentClass, тогда как потому, что она оценивается в контексте ChildClass через наследование, оценивается членная переменная $TestClassClass.
Я прочитал документацию, но, похоже, не вижу упоминания об этом нюансе. Может ли кто-нибудь пролить свет на меня?