重写类常量与属性
2022-08-30 07:14:54
我想更好地理解为什么在下面的场景中,类常量与实例变量的继承方式存在差异。
<?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。
我已经阅读了文档,但似乎看不到任何提及这种细微差别的内容。任何人都可以为我提供一些启示吗?