未定义的类常量'self :: STRING'

时间:2012-12-28 15:33:25

标签: php class static late-static-binding

我一直在苦苦挣扎几天,有一个非常奇怪的错误: 这是场景(跟我一起):

我有一个“框架”类,我称之为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解析了该类并抱怨错误!

1 个答案:

答案 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'
相关问题