【发布时间】:2012-12-13 20:35:35
【问题描述】:
我已经为一个完全奇怪的错误苦苦挣扎了几天: 这是场景(请耐心等待):
我有一个“框架”类,我称之为 F。 我有一些扩展 F 的简单类,我将其中一个称为 P。
所以我有的是:
class F {
[...]
protected static $_tabela;
[...]
final public static function _Tabela() {
return static::$_tabela;
}
public static function Consultar() {
echo static::_Tabela();
}
}
class P extends F {
protected static $_tabela = 'produtos';
}
当我打电话给P::Consultar(); 时,我收到了这个对我来说毫无意义的错误:
Fatal error: Undefined class constant 'self::STRING' in [...]/F.inc.php on line X
其中 X 是 _Tabela() 方法的主体。
所以,我尝试更改变量名称 ($_tabela)。 我尝试通过 get_call_class() 保存类名:
$class = get_called_class()
return $class::$_tabela;
但是遇到了同样的错误。
另外,错误信息完全没用,我不是在尝试访问类常量,而是访问类静态属性!
谷歌搜索错误消息也没有给我任何有用的结果。
编辑:感谢大家的回答! 我发现了问题,它与我正在查看的代码无关。 原来P类的定义有错误,所以当我尝试调用static::Consultar时,PHP解析了这个类并报错了!
【问题讨论】:
-
一些你看到这个错误的代码会有帮助
-
在询问错误时,您应该始终包括完整的错误消息以及有问题的行及其上方的行。
-
您的代码没有任何意义,您能否发布重要的原始代码部分?
-
指定您的 PHP 版本,正如@MrSoundless 回答所说,这应该适用于 PHP 5.3 及更高版本。另外......不想问你到底为什么要这样做,但我要说一些理智的话,停止使用静态!
-
我有一个怀疑。尝试用 self 替换 static,在这种情况下,它应该具有您期望的相同效果,但它应该可以工作。这可能是某个版本中引入的错误,我们可以检查是否有报告,但它适用于 5.3.10。
标签: php class static late-static-binding