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

2022-08-30 13:25:38

将我的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

我试图通过调查代码来解决问题,但没有运气


答案 1

解决方案

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

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

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

2-运行以将您的拉拉维尔更新到最新版本composer update

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 类型系统中引入了一些改进,例如引入了联合类型、混合类型等等。

通过这些更改,反射 API 的反射参数中的某些方法会产生不正确的结果。

在 PHP 8 中,ReflectionParameter 类中的以下方法已弃用:

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

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


答案 2

检查虚拟机(xampp 或服务器)中的 php 版本。

php --version

那个版本是PHP 8吗?我说的对吗?这就是问题的原因:

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

通过这些更改,反射 API 的反射参数中的某些方法会产生不正确的结果。

在 PHP 8 中,ReflectionParameter 类中的以下方法已弃用:

  • 反射参数::getClass()
  • 反射参数::isArray()
  • 反射参数::isCallable()
  • 反射参数::getType()

将你的php版本降级到7.4,你的Laravel应用程序就像一个魅力!


推荐