我想更好地理解为什么在下面的场景中,类常量的继承方式与实例变量的方式有所不同。
<?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 上下文中评估的,所以正在评估 ChildClass 成员变量 $test。
我已经阅读了文档,但似乎没有看到任何关于这种细微差别的提及。任何人都可以为我解释一下吗?