我发现了一件奇怪的事:
<?php
class LW_Base{
const MULTIPLE = 'LW_Base';
public static function name(){
return strtolower(static::MULTIPLE);
}
}
class LW_Extend extends LW_Base{
const MULTITPLE = 'LW_Extend';
}
$t = new LW_Extend();
echo $t::name().'==LW_Extend';
?>
这是一个很小的(350行- NCLOC) php项目的代码剪辑。输出应该是"lw_extend== lw_extend ",但实际上是"lw_base== lw_extend "。
我发誓:在另一个更大的项目(1155行- NCLOC),更复杂的(命名空间,类层次结构,很多函数,…),这是工作的。
问题:我做错了什么/不稳定?
我真的需要一个信息。我要找一个星期。我认为解决方案必须很简单,因为它适用于另一个项目(我实际上不能粘贴关于其他项目的信息,抱歉)此致敬礼,感谢每一个帖子。奥利
两个类的const声明拼写错误,
const MULTIPLE = 'LW_Base';
const MULTITPLE = 'LW_Extend';
必须调用与相同的类中的常数self
class LW_Base{
const MULTIPLE = 'LW_Base';
public static function name(){
return strtolower(self::MULTIPLE);
}
}