Laravel 应用程序在升级到 php 8 后停止工作

新手上路,请多包涵

将我的 mac 更新到 php 8 laravel 应用程序停止工作后,这是我得到的错误:

 Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 871

Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 945

Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 871

Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 945

我试图通过调查没有运气的代码来解决这个问题

原文由 Pezhvak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 959
2 个回答

解决方案

正如 这里 所解释的,最新版本的 laravel 6、7 和 8 已经对 php 8 进行了更改。你所要做的就是:

1-将php 8添加到您的 composer.json (我保留v7.4以防生产服务器不支持php 8)

 "php": "^7.4|^8.0",

2-运行 composer update 更新你的laravel到最新版本

composer update

3-确保更新以下库,因为它们存在于所有 laravel 应用程序中

PHP to php:^8.0
Faker to fakerphp/faker:^1.9.1
PHPUnit to phpunit/phpunit:^9.3

4-检查需要更新的任何其他库,如果它们不支持 php 8,请贡献。但是您应该很好地使用大多数库,因为它们有活跃的贡献者。

解释问题

如此 所述

PHP 8 在 PHP 类型系统中引入了一些改进,例如引入联合类型、混合类型等等。

通过这些更改,Reflection API 的 ReflectionParameter 中的某些方法会产生不正确的结果。

在 PHP 8 中,不推荐使用 ReflectionParameter 类中的以下方法:

 ReflectionParameter::getClass()
ReflectionParameter::isArray()
ReflectionParameter::isCallable()

ReflectionParamter::getType() 是替换已弃用方法的推荐方法。此方法在 PHP 7.0 及更高版本中可用。

原文由 Pezhvak 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您使用代客泊车,您应该执行以下操作:

  1. 从php8+降级到php7.4 valet isolate php@7.4
  2. 然后使用代客运行 composer update valet composer update

原文由 Sule-balogun O.G 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题