Overriding class constants vs properties

女生的网名这么多〃 提交于 2019-11-28 03:44:25

self:: Isn't inheritance-aware and always refers to the class it is being executed in. If you are using php5.3+ you might try static::TEST as static:: is inheritance-aware.

The difference is that static:: uses "late static binding". Find more information here:

http://php.net/manual/en/language.oop5.late-static-bindings.php

Here's a simple test script I wrote:

<?php

class One
{
    const TEST = "test1";

    function test() { echo static::TEST; }
}
class Two extends One
{
    const TEST = "test2";
}

$c = new Two();

$c->test();

output

test2

In PHP, self refers to the class in which the called method or property is defined. So in your case you're calling self in ChildClass, so it uses the variable from that class. Then you use self in ParentClass, so it wil then refer to the variable in that class.

if you still want the child class to override the const of the parent class, then adjust the following code in your parent class to this:

public function showTest(){
    echo static::TEST;
    echo $this->test;
}

Note the static keyword. This is uses "late static binding". Now you're parent class will call the const of your child class.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!