【发布时间】:2012-11-16 19:22:17
【问题描述】:
我想更好地理解为什么在下面的场景中,类常量与实例变量的继承方式有所不同。
<?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 成员变量 $test。
我已阅读文档,但似乎看不到任何提及此细微差别的内容。谁能帮我解释一下?
【问题讨论】:
-
WTF?不断超越!?不要这样做!从来没有!
-
@qwert_ukg 确实如此。有人应该将这一点传达给 PHP 的开发人员。或者至少允许
final... -
肯定有足够好的用例,即使是不断覆盖:]
标签: php oop inheritance overriding constants