Symfony 5.2.3 接口类型提示
Posted
技术标签:
【中文标题】Symfony 5.2.3 接口类型提示【英文标题】:Symfony 5.2.3 interface type-hinting 【发布时间】:2021-05-11 23:47:21 【问题描述】:自从我更新了我的composer.json
(我刚刚切换了symfony
、console
、dotenv
、framework-bundle
、yaml
版本从"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”的类型提示无效