Я хотів би краще зрозуміти, чому в нижченаведеному сценарії є різниця в тому, як успадковуються константи класу проти змінних екземплярів.
<?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, версія ParentClass константи TEST оцінюється, тоді як, оскільки вона оцінюється в контексті ChildClass шляхом успадкування, оцінюється $ тест $ змінної ChildClass.
Я прочитав документацію, але, здається, не бачу жодної згадки про цей нюанс. Чи може хтось пролити на мене світло?
final
...