我收到此错误:
PS C:\Users\User\Desktop\jk> php artisan serve
PHP Fatal error: Uncaught ErrorException: Method ReflectionParameter::getClass() is deprecated in C:\Users\User\Desktop\jk\vendor\laravel\framework\src\Illuminate\Container\Container.php:788
Stack trace:
Run Code Online (Sandbox Code Playgroud)
Composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": "^7.4|^8.0",
"laravel/framework": "5.4.*",
"laravelcollective/html": "^5.3.0",
"guzzlehttp/guzzle": "^6.3",
"doctrine/dbal": "^2.9"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "^9.3",
"symfony/css-selector": "3.1.*",
"symfony/dom-crawler": "3.1.*"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"platform": {
"php": "8.0.1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
Container.php 这里是代码的一部分
protected function resolveClass(ReflectionParameter $parameter)
{
try {
return $this->make($parameter->getClass()->name);
}
// If we can not resolve the class instance, we will check to see if the value
// is optional, and if it is we will return the optional parameter value as
// the value of the dependency, similarly to how we do this with scalars.
catch (BindingResolutionException $e) {
if ($parameter->isOptional()) {
return $parameter->getDefaultValue();
}
throw $e;
}
}
Run Code Online (Sandbox Code Playgroud)
Method ReflectionParameter::getClass() 已弃用。我认为 getclass 方法在版本 8.0.1 中已弃用,而不是我尝试使用 ReflectionParameter::getType() 之类的链接 ,但不起作用。而且成员还建议此 Laravel 应用程序在之后停止工作升级到 php 8我也尝试过这个但不起作用
小智 12
因为 ReflectionParameter::getClass() 在 php 8 中已被弃用。
解决方案转到
vendor\laravel\framework\src\Illuminate\Container\Container.php
Run Code Online (Sandbox Code Playgroud)
并前往
受保护函数resolvePrimitive(ReflectionParameter $parameter)
并替换
$parameter->getClass()** with **$parameter->getType()->getName()。
Laravel 5.4 似乎有不正确的平台要求。具体来说,它需要 PHP 版本 >= 5.6,但它的代码无法在 PHP 8 中工作。由于 5.4 已经结束,我不希望任何官方代码更改使其适用于 PHP 8,因此您要么需要 fork 并维护您自己的 Laravel 5.4 分支来解决这些问题,或者将您的 Laravel 版本升级到支持 PHP 8 的版本。
第一个支持 PHP 8 的 Laravel 版本是 Laravel 6