Illuminate\Container\Container::get($id) 的声明必须兼容 Psr\Container\ContainerInterface::get(string $id)

cLi*_*Lin 7 php vagrant laravel

安装了新的 Laravel 8 项目并在加载第一个实例时出现以下错误。这很奇怪,因为我把它放在一边,后来从 Laravel 5.8 -> 6 升级了另一个项目(工作正常),并在我去检查站点时遇到了类似的错误。

我已经清除了作曲家缓存,删除了供应商文件夹并重新安装,但似乎无法弄清楚。过去一天我一直在绞尽脑汁,似乎某些软件包版本不正确,但我不确定从哪里开始进行故障排除。

( ! ) 致命错误:Illuminate\Container\Container::get($id) 的声明必须与 /home/vagrant/ps/vendor/laravel/framework 中的 Psr\Container\ContainerInterface::get(string $id) 兼容/src/Illuminate/Container/Container.php 第 15 行

Call Stack
#   Time    Memory  Function    Location
1   0.0001  357784  {main}( )   .../index.php:0
2   0.0133  502360  require_once( '/home/vagrant/ps/bootstrap/app.php' )    .../index.php:47
3   0.0133  502360  spl_autoload_call ( )   .../app.php:14
4   0.0133  502424  Composer\Autoload\ClassLoader->loadClass( ) .../app.php:14
5   0.0133  502424  Composer\Autoload\includeFile( )    .../ClassLoader.php:322
6   0.0135  578336  include( '/home/vagrant/ps/vendor/laravel/framework/src/Illuminate/Foundation/Application.php' )    .../ClassLoader.php:444
7   0.0135  578336  spl_autoload_call ( )   .../Application.php:29
8   0.0135  578392  Composer\Autoload\ClassLoader->loadClass( ) .../Application.php:29
9   0.0135  578392  Composer\Autoload\includeFile( )    .../ClassLoader.php:322
10  0.0138  588440  include( '/home/vagrant/ps/vendor/laravel/framework/src/Illuminate/Container/Container.php' )   .../ClassLoader.php:444
Run Code Online (Sandbox Code Playgroud)

Nev*_*kes 10

您使用的是什么版本的 PHP?看起来这个问题的发生是因为在psr/container五天前发布的 v1.0.0 和 v.1.1.0 之间添加了静态类型以弃用 PHP < 7.2

https://github.com/php-fig/container/blob/1.0.0/src/ContainerInterface.php#L23

https://github.com/php-fig/container/blob/1.1.0/src/ContainerInterface.php#L22

固定psr/container到 v1.0.0 应该可以解决这个问题,直到 Illuminate 更新

  • 我花了将近一周的时间试图解决这个问题。在这里非常感谢您的回答。在我的composer.json底部插入```"psr/container": "1.0.0"```,运行更新,然后部署,现在效果很好。非常感谢你的回答@cLin (4认同)
  • 谢谢,这正是问题所在。当我使用 phpinfo() 查看输出内容时,它使用的是版本 7.1.3,而我的 CLI 版本是 7.4。更改配置后快速重新启动服务器并且它起作用了。 (2认同)