Php 未定义的类常数';self::STRING';
几天来,我一直在为一个完全奇怪的bug而挣扎: 以下是场景(请耐心听我说): 我有一个“框架”类,我称之为F。 我有一些扩展F的简单类,其中一个我称为P 因此,我得到的是:Php 未定义的类常数';self::STRING';,php,class,static,late-static-binding,Php,Class,Static,Late Static Binding,几天来,我一直在为一个完全奇怪的bug而挣扎: 以下是场景(请耐心听我说): 我有一个“框架”类,我称之为F。 我有一些扩展F的简单类,其中一个我称为P 因此,我得到的是: class F { [...] protected static $_tabela; [...] final public static function _Tabela() { return static::$_tabela; } public static
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()代码>我得到了这个对我来说毫无意义的错误:
致命错误:第X行[…]/F.inc.php中未定义的类常量“self::STRING”
其中X是_Tabela()方法的主体
因此,我尝试更改变量名($\u tabela)。
我尝试通过get_called_class()保存类名:
但也犯了同样的错误
此外,错误消息完全没有用处,我不是试图访问类常量,而是访问类静态属性
谷歌搜索错误消息也没有给我任何有用的结果
编辑:谢谢大家的回答!
我发现了问题,它与我正在查看的代码无关。
事实证明P类的定义中有一个错误,所以当我尝试调用static::Consultar时,PHP解析了该类并抱怨了这个错误 如果您使用的是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'
如果您使用的是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'
当您询问错误时,看到此错误的某些代码会很有帮助。您应该始终包含完整的错误消息、有问题的行及其上方的行。您的代码没有任何意义,您可以发布部分重要的原始代码吗?请指定您的PHP版本,如@MrSoundless answer所述,这应该适用于PHP5.3及更高版本。也。。。我不想问你到底为什么要这么做,但我留下一些理智的话,停止使用静力学!我有点怀疑。尝试用self替换static,在这种情况下,它应该具有与您期望的相同的效果,只是它应该可以工作。这可能是某个版本中引入的错误,我们可以检查是否有报告,但它在5.3.10上工作。某些代码在您看到此错误时会很有帮助。当询问错误时,您应该始终包含完整的错误消息、有问题的行以及上面的行。您的代码没有任何意义,您可以发布一些重要的原始代码吗?请指定您的PHP版本,正如@MrSoundless answer所说,这应该适用于PHP5.3及更高版本。也。。。我不想问你到底为什么要这么做,但我留下一些理智的话,停止使用静力学!我有点怀疑。尝试用self替换static,在这种情况下,它应该具有与您期望的相同的效果,只是它应该可以工作。这可能是某个版本中引入的错误,我们可以检查是否有报告,但它在5.3.10上工作。