Samengevat door durumis AI
- PHP 5.3부터 8.2까지의 코드를 최신 버전으로 업그레이드하는 도구인 Rector를 소개합니다.
- Rector는 PHP 버전 설정, 원하는 함수 설정, 제외 규칙 등을 설정하여 사용할 수 있습니다.
- 코드를 바로 수정하는 기능은 있지만, Git으로 확인하는 것이 좋습니다.
Koreaanse php cms Gnuboard5 site를 보고 php 버전 업그레이드 후 지원이 중단된 문법 및 버전으로
어려움을 호소하는 글이 몇 개 있었습니다. 그래서 찾다가..
reddit 에 가보니 rector 라는 툴을 쓰면 마이그레이션을 도와준다고 해서 사용법을 소개합니다.
PHP 7.0 이 출시된 2015년 이후 php 마이그레이션 툴이 나왔는데요 php cs-fixer , rector 등등
rector 가 조금 더 사용이 편리한 것 같습니다.
rector (발음: 렉터) 는 PHP 5.3 ~ 8.2 의 코드를 원하는 버전에 맞게 문법검사를 하고 고쳐줍니다.
een beetje vervelend is dat rector een statische analyser is en runtime fouten niet kan detecteren.
Rector 는 php 패키지 관리도구인 컴포저가 설치되어 있어야 합니다.
1. 컴포저를 설치합니다.
2. 현재 프로젝트 폴더에 rector 를 설치합니다.
```php composer require rector/rector --dev
3. 설정파일인 rector.php 를 만듭니다.
rector.php instellingen
Om het te begrijpen, zullen we een scenario definiëren.
De broncode is php5.3 code en de doelversie is php 7.4.
De Rector-versie is 1.0.3.
```php <?php
gebruik Rector\Config\RectorConfig; gebruik Rector\Php54\Rector\Array_\LongArrayToShortArrayRector; gebruik Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector;
return RectorConfig::configure() ->withPhpSets(php74: true) ->withParallel(1200, 8, 8) ->withPaths([ DIR . '/src', // pad van broncode ]) ->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() stelt broncodemap, PHP-versie in.
withPhpSets-functie stelt de te upgraden PHP-functie in.
Als de momenteel actieve PHP-versie php 8.0 is
```php ->withPhpSets(php74: true)
kan het als volgt worden ingesteld: php version: true.
Echter, als de actieve PHP-versie lager is dan php 7.4
de naamloze parameter in de functie kan niet worden gebruikt, dus moet true worden ingesteld wanneer de gewenste versie uitkomt.
Omdat rector php 8.3 ondersteunt, moet je het als volgt doen om php 74 aan te geven.
```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__, // dit is de map waar rector.php zich bevindt.
])
```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/*',
])
Regels en mappen die je niet wilt toepassen, worden opgegeven.
Map: '/mapnaam/*'
Bestand: 'bestandsnaam'
We hebben de regel "SensitiveConstantNameRector" toegevoegd omdat
rector dit niet vindt wanneer er een undefined index in een PHP-array staat, en het alleen herkent als constante en dit verkeerd probeert te wijzigen. Daarom is dit toegevoegd aan de uitzonderingsregels.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Deze regels worden uitgesloten omdat ze betrekking hebben op de codestijl.
Uitvoeren
Er zijn twee manieren.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Dit commando geeft alleen de codes weer die moeten worden gewijzigd op de console.
Omdat de broncode groot kan zijn, moet je de gebruikte RAM opgeven met de optie --memory-limit=2G.
```bash vendor/bin/rector --memory-limit=2G
Dit commando wijzigt de broncode direct.
Je moet dit controleren met git, omdat er ongewenste opties of fouten kunnen zijn.