ParseError:语法错误,意外的 'EntityManagerInterface' (T_STRING),期望函数 (T_FUNCTION) 或 const (T_CONST)

Posted

技术标签:

【中文标题】ParseError:语法错误,意外的 \'EntityManagerInterface\' (T_STRING),期望函数 (T_FUNCTION) 或 const (T_CONST)【英文标题】:ParseError: syntax error, unexpected 'EntityManagerInterface' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST)ParseError:语法错误,意外的 'EntityManagerInterface' (T_STRING),期望函数 (T_FUNCTION) 或 const (T_CONST) 【发布时间】:2021-06-26 09:31:48 【问题描述】:

此代码产生错误:

     /**
     * @var EntityManagerInterface
     */
    private EntityManagerInterface $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    
        $this->entityManager = $entityManager;

        parent::__construct();
    

我的 composer.json 使用

"php": ">=7.1.3",

我使用 Symfony 4.4,这是我工作的必要条件。

我在互联网上的某个地方发现这种类型的错误是由过时的 php 版本引起的,但我不确定在这种特定情况下是否是这种情况。我的问题是我是否可以以不同的方式编写代码,或者我唯一的选择是转到更高的 php 版本?

【问题讨论】:

这是一个类型声明。 php.net/manual/en/language.types.declarations.php:“类型声明可以添加到函数参数、返回值,以及从 PHP 7.4.0 开始的类属性。” “我的问题是我是否可以以不同的方式编写代码” - 如果这不是您的代码,而是来自某些外部组件/框架- 那就不要尝试了。将 PHP 更新到您打算使用的组件所需的最低版本,其他一切都没有意义。 感谢您的解释,现在对我来说很有意义。 可能想把这件事告诉你的老板,看看你的团队是否不能更新到 PHP 7.4 甚至 8.0。有时会出现阻止升级的问题,但有时只是因为没有人想到这样做。 是的,这是个好建议,谢谢。 【参考方案1】:

不用放

EntityManagerInterface

在变量声明中。

所以,请更换

private EntityManagerInterface $entityManager;

private $entityManager;

它的依赖注入已经添加在Constructor函数参数中:

public function __construct(EntityManagerInterface $entityManager)

【讨论】:

以上是关于ParseError:语法错误,意外的 'EntityManagerInterface' (T_STRING),期望函数 (T_FUNCTION) 或 const (T_CONST)的主要内容,如果未能解决你的问题,请参考以下文章

解析错误:语法错误,意外的“未设置”(T_UNSET)

解析错误:语法错误,意外'[',期待')' [重复]

语法错误:意外;

解析错误:语法错误,文件意外结束,期待'`' [重复]

解析错误:语法错误,意外标记“:”

解析错误:语法错误,文件意外结束[重复]