当你有继承的类时,子类设置一些常量,而父类有一个需要使用它们的静态方法:
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()
有没有办法让它发挥作用?
答案 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)