2012-12-28 75 views
1

我一直在掙扎了幾天,現在有一個完全怪異的錯誤: 這裏的情景(多多包涵):未定義類常量「自我:: STRING」

我有一個「框架」類,我會打電話給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; 

但得到了同樣的錯誤。此外,錯誤消息是完全無用的,我不是試圖訪問一個類常量,而是一個類的靜態屬性!

使用谷歌搜索錯誤消息也沒有給我有用的結果。

編輯:謝謝大家的答案! 我發現了這個問題,它與我所看到的代碼無關。 原來在P類的定義中有一個錯誤,所以當我嘗試調用static :: Consultar時,PHP解析了類並抱怨錯誤!

+0

一些代碼,如果您看到這個錯誤將是有益的 –

+0

當問錯誤,你應該始終包括完整的錯誤消息和違規行以及它上面的行。 –

+2

你的代碼沒有任何意義,你可以發佈重要的部分原始代碼嗎? – dbf

回答

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'