Texte résumé par l'IA durumis
- J'ai présenté l'outil de migration Rector pour résoudre les problèmes de syntaxe et de versions obsolètes lors de la mise à niveau de la version PHP.
- Rector peut analyser et corriger automatiquement le code PHP des versions 5.3 à 8.2 pour les mettre à niveau vers la version souhaitée.
- Pour utiliser Rector, il faut installer Composer, rédiger un fichier de configuration rector.php, spécifier les règles et les dossiers à appliquer, puis l'exécuter.
J'ai trouvé quelques articles décrivant les difficultés rencontrées après la mise à niveau de la version PHP des sites GNUboard 5, un CMS PHP coréen, avec l’arrêt de la prise en charge des anciennes syntaxes et versions.
J'ai donc cherché des solutions sur Reddit.
J'ai trouvé l'outil rector et vous présente ici son mode d'emploi.
Depuis la sortie de PHP 7.0 en 2015, des outils de migration ont été développés : php cs-fixer, rector, etc.
Je trouve rector plus simple d’utilisation.
rector (prononcé : rector) vérifie la syntaxe de votre code PHP 5.3 à 8.2 et le corrige en fonction de la version souhaitée.
Seul bémol : rector est un analyseur statique, il ne peut donc pas détecter les erreurs qui surviennent lors de l'exécution.
Rector nécessite l'installation de Composer, l'outil de gestion des packages PHP.
1. Installez Composer.
2. Installez rector dans le dossier de votre projet en cours.
```php composer require rector/rector --dev
3. Créez le fichier de configuration rector.php.
Configuration de rector.php
Pour faciliter la compréhension, nous allons définir un contexte.
Le code source est en PHP 5.3 et la version cible pour la mise à niveau est PHP 7.4.
La version de Rector est 1.0.3.
```php <?php
use Rector\Config\RectorConfig; use Rector\Php54\Rector\Array_\LongArrayToShortArrayRector; use Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector;
return RectorConfig::configure() ->withPhpSets(php74: true) ->withParallel(1200, 8, 8) ->withPaths([ DIR . '/src', // Chemin d'accès au code source ]) ->withSkip([ Rector\Php73\Rector\ConstFetch\SensitiveConstantNameRector::class, Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector::class, Rector\CodeQuality\Rector\If\SimplifyIfElseToTernaryRector::class, Rector\Php53\Rector\Ternary\TernaryToElvisRector::class, Rector\Php80\Rector\Class\ClassPropertyAssignToConstructorPromotionRector::class, Rector\Php80\Rector\FunctionLike\MixedTypeRector::class, Rector\CodeQuality\Rector\If\SimplifyIfNullableReturnRector::class, Rector\Php80\Rector\Switch\ChangeSwitchToMatchRector::class, Rector\Php74\Rector\Closure\ClosureToArrowFunctionRector::class, Rector\Php71\Rector\ClassConst\PublicConstantVisibilityRector::class, ]);
RectorConfig::config définit le dossier de code source et la version PHP.
La fonction withPhpSets définit les fonctions PHP à mettre à niveau.
Si la version PHP en cours d'exécution est PHP 8.0
```php ->withPhpSets(php74: true)
Vous pouvez définir ainsi : phpversion : true.
Toutefois, si la version PHP en cours d'exécution est PHP 7.4 ou une version inférieure
Vous devrez définir true à l'arrivée de la version souhaitée, car vous ne pourrez pas utiliser la syntaxe des paramètres nommés dans la fonction.
rector est compatible avec PHP 8.3. Voici comment procéder pour indiquer PHP 74 :
```php ->withPhpSets( false, // php 8.3 false, // php 8.2 false, // php 8.1 false, // php 8.0 false, // php 8.1 true // php 7.4 )
->withPaths([
__DIR__ , // Il s'agit du répertoire où se trouve rector.php.
])
```php
->withSkip([
Rector\Php73\Rector\ConstFetch\SensitiveConstantNameRector::class,
Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector::class,
Rector\CodeQuality\Rector\If\SimplifyIfElseToTernaryRector::class,
Rector\Php53\Rector\Ternary\TernaryToElvisRector::class,
Rector\Php80\Rector\Class\ClassPropertyAssignToConstructorPromotionRector::class,
'/data/*',
])
Indiquez les règles et dossiers que vous ne souhaitez pas appliquer.
Dossier : '/nomDuDossier/*'
Fichier : 'nomDuFichier'
Parmi les règles, j'ai ajouté "SensitiveConstantNameRector" car
rector ne peut pas détecter les index non définis dans les tableaux PHP et les reconnaît uniquement comme des constantes, ce qui peut conduire à des modifications erronées. Je l'ai donc ajouté aux exceptions.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Ces règles sont exclues car elles concernent uniquement le style du code.
Exécution
Deux possibilités :