【问题标题】:ClassName::CLASS in PHP 5.4 with Symfony Framework带有 Symfony 框架的 PHP 5.4 中的 ClassName::CLASS
【发布时间】:2015-11-02 14:49:28
【问题描述】:

我刚刚将一个正常工作的 Symfony 安装从一个文件夹移动到另一个文件夹。现在我得到错误

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 中。我不知道我是怎么把这个正在运行的系统移动到另一个目录而导致它崩溃的。

【问题讨论】:

  • 这是一个措辞相当混乱的问题。您能否将 PHP 文档链接到您认为 PHP 5.5 中新增静态引用的地方?据我所知,它至少从 5.3 开始就可用——如果不是更早的话。您对“方法”一词的使用在这里也令人困惑。您是指编程术语方法(在 Class 中定义的函数)吗?还是非编程的特定术语(做某事的过程)?
  • @HPierce PHP 5.5 添加了一个特殊的“类常量”,您可以像\MyNamespace\MyClass::class 一样访问它,然后它会返回"MyNamespace\MyClass"PHP doc entry
  • 那么这里的问题到底是什么?是的,::class 功能在 PHP 5.4 中不存在,所以如果您的依赖项之一使用它,它将无法工作。也许您在使用此功能的新目录中使用了其中一个捆绑包的较新版本?
  • 最后我找到了使用 ::class 的捆绑包仅在缓存中有效的解决方案。清除缓存并使用 PHP 5.4 而不是 5.6 后它崩溃了

标签: php symfony


【解决方案1】:

只要您坚持使用 PHP 5.4,这可能会有所帮助。 但请注意,对 PHP 5.4 的支持已经结束 - 所以你不应该再依赖了!

在升级到 PHP 5.5 之前,我们使用 trait 作为临时解决方案进行了以下操作:

/**
 * 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;

....
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2017-01-08
    • 2017-12-02
    • 2015-12-03
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多