2015-11-02 33 views
-2

我剛將一個可用的symfony安裝從一個文件夾移動到另一個文件夾。現在我得到錯誤ClassName :: PHP中帶有Symfony框架的CLASS

FatalErrorException: Parse Error: syntax error, unexpected 'CLASS' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in ... 

我知道Classname :: CLASS方法是在PHP 5.5中實現的。但我使用PHP 5.4,直到今天一切正常。 CLASS方法用於供應商目錄中的幾個類中,例如在需要的Gos \ Bundle \ WebSocketBundle中。我不知道我爲了將這個正在運行的系統移動到另一個目錄而做了什麼。

+0

這是一個非常容易混淆的措辭題。你能鏈接PHP文檔,你認爲靜態引用在PHP 5.5中是新的嗎?據我所知,自5.3以來,它至少已經可用* - 如果不是更早的話。你在這裏使用「方法」這個詞也是令人困惑的。你的意思是編程術語方法(一個在* Class *中定義的函數)?或非編程專用術語(做某事的程序)? – HPierce

+1

@HPierce PHP 5.5增加了一個特殊的「類常量」,你可以像'\ MyNamespace \ MyClass :: class'那樣訪問它,然後返回'「MyNamespace \ MyClass」'。 [PHP doc條目](http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class) – hanzi

+0

那麼究竟是什麼問題呢?是的,在PHP 5.4中不存在''class''特性,所以如果你的一個依賴使用它,那將無法工作。也許你正在使用這個特性的新目錄中使用你的一個bundle的更新版本? – hanzi

回答

0

只要你困在PHP 5.4中,這可能會有所幫助。 但請注意,對PHP 5.4的支持已經結束 - 所以你不應該依賴了!

我們做到了與性狀作爲臨時解決方案如下,直到我們升級到PHP 5.5:

/** 
* Trait to supplement the PHP 5.5 function ::class 
* 
*/ 
trait ClassName 
{ 
/** 
* Returns the Full name of a class (equivalent of ::class which can be used starting from php 5.5) 
* 
* @return string the class name including namespace 
*/ 
static public function CLASSNAME() 
{ 
    return get_called_class(); 
} 
} 

,並在一些基礎類使用它:

use ClassName; 

class MyClass { 
use ClassName; 

.... 
}