Symfony 5.2.3 接口类型提示

Posted

技术标签:

【中文标题】Symfony 5.2.3 接口类型提示【英文标题】:Symfony 5.2.3 interface type-hinting 【发布时间】:2021-05-11 23:47:21 【问题描述】:

自从我更新了我的composer.json(我刚刚切换了symfonyconsoledotenvframework-bundleyaml 版本从"5.0.*"5.2.*),我有这个错误:

syntax error, unexpected '|', expecting variable (T_VARIABLE) 来自第 27 行,文件 vendor/psr/link/src/EvolvableLinkInterface.php

(public function withHref(string|\Stringable $href);)

我决定删除我的一个兼性参数类型提示(例如\Stringable)并且效果很好。

我在PHP 7.4.15下运行。

你知道我该如何解决吗?

【问题讨论】:

请分享更多细节 - 与 PHP 7(版本 1.0.0)兼容的最新版 psr/link 不包含这样的类型提示。在 v1.1.0(与 PHP 7 兼容)中,存在此类型提示 谢谢@NicoHaase!你说得对。如果我在InstalledVersions.php 中检查我的psr/link 版本,我可以看到1.1.0 与我的PHP 版本不兼容。那么两个简单的问题:为什么在我的composer.json 更改之前它可以工作?如何修复psr/link 版本(我的composer.json 中没有出现) 这取决于您在composer.json 中需要哪个PHP 版本,以及如何调用它 @NicoHaase "php": "^7.4" 你是如何指示 composer 获取新的依赖项的? 【参考方案1】:

看来我们https://github.com/php-fig 的好伙伴使用Union Type Hints 抢先一步,这仅适用于php8。他们没有提供对 php7 的支持。他们出于某种原因从 php5 转到 php8。你可以在 packagegist 中看到这个:

psr/link v1.0.0 与 psr/link v1.1.0

还有:

psr/log v1.1.4 与 psr/log v2.0.0

这也会在依赖 psr/log 并运行 php7 的 Laravel 7 中引起问题。

您需要指定较旧的软件包版本:

composer require psr/link "1.0.*"

composer require psr/log "^1.0"

【讨论】:

这实际上是我所做的,我指定了一个旧版本。感谢您提供详细信息。

以上是关于Symfony 5.2.3 接口类型提示的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5 VichUploaderBundler:类“App\Entity\xxx”中方法“setImageFile”中参数“imageFile”的类型提示无效

PHP 7 接口,返回类型提示和自我

PHP 7接口,返回类型提示和自我

PHPUnit、接口和命名空间 (Symfony2)

面向对象2

Doctrine|ORM|Symfony:可能与接口或多个实体有关系