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

Pez*_*vak 18 php 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
Run Code Online (Sandbox Code Playgroud)

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

Pez*_*vak 25

解决方案

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

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

"php": "^7.4|^8.0",
Run Code Online (Sandbox Code Playgroud)

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

composer update
Run Code Online (Sandbox Code Playgroud)

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

PHP to php:^8.0
Faker to fakerphp/faker:^1.9.1
PHPUnit to phpunit/phpunit:^9.3
Run Code Online (Sandbox Code Playgroud)

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

解释问题

描述在这里

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

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

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

ReflectionParameter::getClass()
ReflectionParameter::isArray()
ReflectionParameter::isCallable()
Run Code Online (Sandbox Code Playgroud)

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