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)的主要内容,如果未能解决你的问题,请参考以下文章