相关疑难解决方法(0)

覆盖类常量与属性

我想更好地理解为什么在下面的场景中,类常量被继承的方式与实例变量的方式不同.

<?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();
Run Code Online (Sandbox Code Playgroud)

输出:

TWO
TWO
ONE
TWO
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,ChildClass没有showTest()方法,因此继承使用ParentClass showTest()方法.结果显示,由于该方法在ParentClass上执行,因此正在评估TEST常量的ParentClass版本,而因为它通过继承在ChildClass上下文中进行评估,所以正在评估ChildClass成员变量$ test.

我已经阅读了文档,但似乎没有看到任何提及这种细微差别.任何人都可以为我解释一下吗?

php oop inheritance overriding constants

91
推荐指数
2
解决办法
3万
查看次数

标签 统计

constants ×1

inheritance ×1

oop ×1

overriding ×1

php ×1