【问题标题】:Laravel - Method ReflectionParameter::getClass() is deprecatedLaravel - 方法 ReflectionParameter::getClass() 已弃用
【发布时间】:2021-11-09 06:01:36
【问题描述】:

我在运行我的 laravel 项目时遇到了一些麻烦。每次我尝试登录或注册新用户时,我都会收到此错误: at HandleExceptions->handleError('8192', 'Method ReflectionParameter::getClass() is deprecated', 'C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Routing\Route.php', '287') in Route.php line 287

我已经尝试更新我的 composer.json 文件上的一些值,然后运行 ​​composer update 命令,就像它在 this thread 上所说的那样,但仍然不起作用。

我的 composer.json 文件是:

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
    "php": "^7.3|^8.0",
    "laravel/framework": "^8.54",
    "barryvdh/laravel-ide-helper": "^2.2",
    "laravelcollective/html": "5.2.*",
    "kartik-v/bootstrap-fileinput": "@dev",
    "laracasts/flash": "^2.0",
    "cohensive/embed": "dev-master",
    "chumper/zipper": "0.6.x"
},
"require-dev": {
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "^9.0",
    "symfony/css-selector": "2.8.*|3.0.*",
    "symfony/dom-crawler": "2.8.*|3.0.*"
},
"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "classmap": [
        "tests/TestCase.php"
    ]
},
"scripts": {
    "post-root-package-install": [
        "php -r \"copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ],
    "post-install-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "pre-update-cmd": [
        "php artisan clear-compiled"
    ],
    "post-update-cmd": [
        "php artisan optimize"
    ]
},
"config": {
    "preferred-install": "dist"
}

}

如果你能帮助我,谢谢。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    问题说明

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

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

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

    ReflectionParameter::getClass()
    ReflectionParameter::isArray()
    ReflectionParameter::isCallable()
    ReflectionParamter::getType()
    

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

    解决方案

    解决这个问题的方法是为你的项目降级或使用两个 php 版本。 以下是您需要在项目中进行的更改。

    1. 通过更新 composer.json 文件在您的项目中添加 php 7.* 版本。只需在您的 composer.json 文件中添加以下代码行。

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

    2- 现在运行composer update

    3-确保所有其他 php 可靠库版本。因为有些库支持 php 8,有些库支持 php 7,所以我们在降级 php 版本时需要它们降级。

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

    4- 这就是你需要做的。

    【讨论】:

    • 我已经尝试过了,但没有成功。每次我尝试运行 composer update 我都会得到同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 2016-06-08
    • 2012-09-20
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多