我想更好地理解为什么在以下情况下,类常量与实例变量的继承方式有所不同。
<?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进行评估。
我已经阅读了文档,但似乎看不到任何细微差别。谁能给我一些启示?
WTF?不断压倒!!不要这样做!决不!
—
qwert_ukg '16
@qwert_ukg确实。有人应该将其传达给PHP开发人员。或者至少允许
—
卢克Sawczak
final
...
即使对于持续覆盖,也肯定有足够好的用例:]
—
Arziel