我一直在苦苦挣扎几天,有一个非常奇怪的错误: 这是场景(跟我一起):
我有一个“框架”类,我称之为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_called_class()保存类名:
$class = get_called_class()
return $class::$_tabela;
但是得到了同样的错误。
此外,错误消息完全没用,我不是试图访问类常量,而是一个类静态属性!
Google搜索错误消息也没有给我带来任何有用的结果。
修改:谢谢大家的答案! 我发现了问题,它与我正在查看的代码无关。 事实证明P类的定义有错误,所以当我尝试调用static :: Consultar时,PHP解析了该类并抱怨错误!
答案 0 :(得分:1)
如果您使用的是PHP版本> = 5.3.0,则可以执行以下操作:
<?php
class F {
protected static $_tabela = 'a';
final public static function _Tabela() {
$s = new static();
return $s::$_tabela;
}
public static function Consultar() {
$s = new static();
echo $s::_Tabela();
}
}
class P extends F {
protected static $_tabela = 'produtos';
}
echo P::Consultar(); // echos 'produtos'