2015-11-02 57 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; 

.... 
}