31

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

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

4

3 回答 3

38

解决方案

正如这里所解释的,最新版本的 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 及更高版本中可用。

于 2020-12-09T14:22:09.510 回答
1

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

php --version

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

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

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

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

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

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

于 2021-09-19T14:50:04.353 回答
0

我有类似的问题。但我已经跑了brew updatebrew cleanup在我注意到这个问题之前。我做了什么:

  1. 我注意到这个错误来自brew cleanup
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/node
Target /usr/local/bin/node
already exists. You may want to remove it:
  rm '/usr/local/bin/node'

To force the link and overwrite all conflicting files:
  brew link --overwrite heroku-node
  1. 我运行了命令:
brew link --overwrite composer
composer upgrade
composer update

这对我有用

于 2021-05-05T01:13:58.277 回答