después de actualizar mi mac a php 8, la aplicación laravel dejó de funcionar, este es el error que recibo:
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 945Intenté solucionar el problema investigando el código sin suerte.
LA SOLUCIÓN
Como se explica aquí, la última versión de laravel 6, 7 y 8 ha realizado los cambios necesarios para php 8. todo lo que tiene que hacer es:
1- agregue php 8 a su composer.json (he guardado v7.4 en caso de que el servidor de producción aún no admita php 8)
"php": "^7.4|^8.0", 2- para ejecutar la actualización del composer update para actualizar su laravel a la última versión
composer update3- asegúrese de actualizar las siguientes bibliotecas ya que existen en todas las aplicaciones de laravel
PHP to php:^8.0 Faker to fakerphp/faker:^1.9.1 PHPUnit to phpunit/phpunit:^9.34- verifique si hay alguna otra biblioteca que deba actualizarse, contribuya si no han sido compatibles con php 8. pero debería estar listo para ir con la mayoría de las bibliotecas ya que tienen colaboradores activos.
EXPLICAR EL PROBLEMA
como se describe aquí
PHP 8 introduce varias mejoras en los sistemas de tipos de PHP, como la introducción de Union Types, tipos mixtos y algunos más.
Con estos cambios, ciertos métodos en ReflectionParameter de la API de Reflection arrojan resultados incorrectos.
En PHP 8, los siguientes métodos de la clase ReflectionParameter están en desuso:
ReflectionParameter::getClass() ReflectionParameter::isArray() ReflectionParameter::isCallable()ReflectionParamter::getType() es la forma recomendada de reemplazar los métodos obsoletos. Este método está disponible en PHP 7.0 y versiones posteriores.
Tuve un problema similar. Pero ya había ejecutado brew update y brew cleanup antes de notar el problema. Lo que hice:
brew cleanup de preparación: 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 brew link --overwrite composer composer upgrade composer updateEso es lo que funcionó para mí
Verifique su versión de php en su máquina virtual (xampp o servidor).
php --version¿Es esa versión PHP 8? ¿Tengo razón? Esa es la causa del problema:
PHP 8 introduce varias mejoras en los sistemas de tipo de PHP, como la introducción de tipos de unión, tipo mixto y algunos más.
Con estos cambios, ciertos métodos en ReflectionParameter de la API de Reflection arrojan resultados incorrectos.
En PHP 8, los siguientes métodos de la clase ReflectionParameter están en desuso:
¡Rebaje su versión de php a 7.4 y su aplicación Laravel funciona de maravilla!