A durumis AI által összefoglalt szöveg
- Bemutatjuk a rector eszközt, amely a PHP 5.3-tól 8.2-ig terjedő kódokat frissíti a legújabb verzióra.
- A rector a PHP-verzió beállításával, kívánt függvények megadásával és kizárási szabályok alkalmazásával használható.
- Közvetlenül módosítja a kódot, de javasolt a git ellenőrzése.
Magyarország GNUBoard5, a koreai PHP CMS honlapjára tévedve a PHP verzió frissítése után voltak, akik nyelvtani és verzióbeli nehézségekről panaszkodtak. Így keresgélve…
a redditre tévedtem, ahol megemlítették a rector nevű eszközt, ami állítólag segít a migrációban, ezért bemutatom, hogyan kell használni.
2015 óta, amikor kiadták a PHP 7.0-t, PHP migrációs eszközök jelentek meg, mint például a php cs-fixer, rector, stb.
A rector használatát barátságosabbnak érezzük.
A rector (kiejtés: rektor) egy statikus elemző eszköz, ami segít PHP 5.3 ~ 8.2 kódjainak nyelvtani ellenőrzését elvégezni, és a hibákat kijavítani.
Egy dolog viszont nem előnyös: a rector csupán statikus elemzéseket végez, a futási folyamat során bekövetkező hibákat nem képes érzékelni.
A Rectorhoz szükség van a PHP csomagkezelőre, a Composerre.
1. Telepítsd a Composert!
2. Telepítsd a rectort az aktuális projekt mappába!
```php composer require rector/rector --dev
3. Hozd létre a rector.php beállítófájlt!
A rector.php beállítása
A megértés kedvéért felállítunk egy helyzetet.
A forráskód php5.3 kód, a frissítés célverziója pedig php 7.4 legyen, ezt feltételezzük a továbbiakban.
A Rector verziója 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', // Forráskód útvonala ]) ->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, ]);
A RectorConfig::config() beállítja a forráskód mappát és a PHP verziót.
A withPhpSets függvény beállítja a frissítendő PHP függvényeket.
Ha a rectort futtató php verziója php 8.0:
```php ->withPhpSets(php74: true)
Ezt így teheted: phpverzió: true.
De ha a futtatott PHP verzió php 7.4 vagy az alatti:
Mivel nem lehet paraméterekkel megadott függvénynevet megadni, a kívánt verzióra várva állítsd be a true értéket.
A rector támogatja a php 8.3 verziót, hogy a php 74 legyen megadva, a következőkre van szükség:
```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([
__
])
```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/*',
])
Azokat a szabályokat és mappákat kell meghatározni, amelyeket nem szeretnénk alkalmazni.
A mappa: '/mappa neve/*'
A fájl: 'fájl neve'
A szabályokat "SensitiveConstantNameRector" hozzáadva
a rector PHP tömbökben nem találja az undefined indexet, csak állandóként ismeri fel, így helytelenül szeretné megváltoztatni. Ezért a kivétellistához adjuk.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Ezeket a szabályokat kódstílus miatt hagyjuk ki.
Futtatás
Van két lehetőség.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Ez a parancs csak a megváltoztatandó kódokat jeleníti meg a konzolon.
Minél több a forráskód, annál több RAM-ra van szükség, ezért a --memory-limit=2G opcióval meg kell adnod a felhasznált RAM-ot.
```bash vendor/bin/rector --memory-limit=2G
Ez a parancs azonnal módosítja a forráskódot.
Mivel lehetnek nem kívánt opciók vagy hibák, gittel kell ellenőrizni.