Von durumis AI zusammengefasster Text
- Ich habe das Migrations-Tool Rector vorgestellt, um Probleme mit veralteter Syntax und Versionen nach einem PHP-Upgrade zu lösen.
- Rector kann PHP-Code von 5.3 bis 8.2 an die gewünschte Version anpassen.
- Für die Nutzung von Rector sind die Installation von Composer, das Erstellen einer rector.php-Konfigurationsdatei, das Ausschließen bestimmter Regeln und Verzeichnisse sowie die Ausführung erforderlich.
Im koreanischen php CMS GuruBoard5 gab es einige Beiträge darüber, dass die Grammatik und die Version nach dem php Versionsupgrade nicht mehr unterstützt werden.
Deshalb habe ich gesucht und...
... bin auf reddit auf ein Tool mit dem Namen rector gestoßen, das bei der Migration helfen soll und stelle hier die Anwendung vor.
Seit dem php 7.0 release in 2015 gab es php Migrationstools: php cs-fixer, rector, usw.
rector scheint mir benutzerfreundlicher zu sein.
rector (ausgesprochen: Rektor) prüft den Code von PHP 5.3 ~ 8.2 auf die richtige Grammatik für die gewünschte Version und korrigiert ihn.
Schade ist nur, dass rector ein statischer Analysator ist, sodass er Laufzeitfehler nicht erkennt.
Rector funktioniert erst, wenn das php Paketverwaltungstool Composer installiert ist.
1. Composer installieren
2. rector im aktuellen Projektordner installieren.
```php composer require rector/rector --dev
3. Konfigurationsdatei rector.php erstellen
rector.php Einstellungen
Um das Verständnis zu erleichtern, legen wir eine Situation fest.
Wir gehen davon aus, dass der Zielsourcecode php5.3 Code ist und die Zielversion für das Upgrade php 7.4 ist.
Die Rector-Version ist 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', // Sourcecode-Pfad ]) ->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() konfiguriert den Sourcecode-Ordner und die PHP-Version.
Die Funktion withPhpSets konfiguriert die zu aktualisierende PHP-Funktion.
Wenn die PHP-Version, mit der rector gerade ausgeführt wird, php 8.0 ist
```php ->withPhpSets(php74: true)
kann sie so geschrieben werden: phpversion : true
Wenn die PHP-Version, mit der rector ausgeführt wird, jedoch php 7.4 oder niedriger ist
Da in der Funktion keine namentlich benannten Parameter verwendet werden können, muss true auf die gewünschte Version gesetzt werden.
Da rector php 8.3 unterstützt, sieht die Angabe von php 74 wie folgt aus:
```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__
, // Das ist das Verzeichnis, in dem sich rector.php befindet.
])
```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/*',
])
Damit können Regeln und Ordner festgelegt werden, die nicht angewendet werden sollen.
Ordner werden mit '/Ordnername/*'
Dateien werden mit 'Dateiname' angegeben.
Von den Regeln wurde "SensitiveConstantNameRector" hinzugefügt, da
rector undefined index in PHP Arrays nicht finden kann und sie nur als Konstanten erkennt, sodass sie falsch geändert werden. Deshalb wird sie zu den Ausnahmeregeln hinzugefügt.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Diese Regeln sind Codestilregeln und werden daher ausgeschlossen.
Ausführung
Es gibt zwei Möglichkeiten.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Dieser Befehl gibt nur die Codes auf der Konsole aus, die geändert werden müssen.
Da der Sourcecode je größer, desto speicherintensiver wird, muss der Hauptspeicher