在继承的php类中使用常量

时间:2017-02-19 23:14:23

标签: php

当你有继承的类时,子类设置一些常量,而父类有一个需要使用它们的静态方法:

class some_helperclass {

    public static function add_them() {

        return self::some_c + self::another_c;
    }

}    

class mainclass extends some_helperclass {

    const some_c  = 1;
    const another_c  = 2;

}

我尝试执行此操作时出错:

mainclass::add_them()

有没有办法让它发挥作用?

1 个答案:

答案 0 :(得分:3)

这是late static binding如何运作的一个很好的例子。

我不会为它重写文档,但是TL; DR是self指的是执行代码的文字类。在您的示例中,mainclass定义了常量,但some_helperclass读取了它们,因此使用self无效。

如果您更改为使用static::CONST_NAME will work

此外 - 仅以大写字母命名常量是一种很好的做法。

代码示例:

<?php

class some_helperclass {

public static function add_them() {

    return static::some_c + static::another_c;
    }

}    

class mainclass extends some_helperclass {

    const some_c  = 1;
    const another_c  = 2;

}

var_dump(mainclass::add_them());

输出:int(3)