1

几天来我一直在为一个完全奇怪的错误而苦苦挣扎:这是场景(请耐心等待):

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

4

1 回答 1

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'
于 2012-12-28T15:54:19.453 回答