Testo riassunto dall'intelligenza artificiale durumis
- Ho presentato lo strumento di migrazione Rector per risolvere i problemi di sintassi e di versione obsoleti dopo l'aggiornamento della versione PHP.
- Rector verifica e corregge la sintassi del codice da PHP 5.3 a PHP 8.2 per adattarlo alla versione desiderata.
- Per utilizzare Rector è necessario installare Composer, scrivere il file di configurazione rector.php, specificare le regole e le cartelle da escludere, e infine eseguirlo.
Nel sito di gestione dei contenuti open source coreano, GNUboard5, dopo che è stato aggiornato il PHP, ci sono stati molti scritti che richiamavano l'attenzione sulle grammatiche e versioni in disuso. Quindi ho cercato e...
... sono arrivato su reddit dove ho trovato uno strumento per la migrazione chiamato rector. Ne presento l'uso.
Dopo che il PHP 7.0 è stato rilasciato nel 2015, è stato realizzato uno strumento per la migrazione del PHP: php cs-fixer, rector ecc.
rector sembra essere più semplice da usare.
rector (pronuncia: rector) controlla la grammatica del codice PHP 5.3–8.2 in base alla versione desiderata e la corregge.
Un aspetto negativo è che rector è un analizzatore statico, quindi non riesce a rilevare gli errori che si verificano durante il runtime.
Rector richiede l'installazione di Composer, uno strumento di gestione pacchetti PHP.
1. Installare Composer.
2. Installare rector nella cartella del progetto corrente.
```php composer require rector/rector --dev
3. Creare il file di configurazione rector.php .
Configurazione rector.php
Per aiutarti nella comprensione, analizzeremo l'esempio.
Supponiamo che il codice sorgente di destinazione sia php5.3 e che la versione di destinazione dell'aggiornamento sia php 7.4.
La versione di Rector è 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', // Percorso codice sorgente ]) ->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() imposta la cartella del codice sorgente e la versione di PHP.
La funzione withPhpSets imposta la funzione PHP da aggiornare.
Se la versione di PHP con cui viene eseguito rector è php 8.0
```php ->withPhpSets(php74: true)
È possibile procedere in questo modo: php_version: true .
Tuttavia, se la versione di PHP in esecuzione è inferiore a php 7.4
Dato che qui non è possibile usare la grammatica per i parametri denominati nella funzione, è necessario impostare true quando si verifica la versione desiderata.
Poiché rector supporta php 8.3, per specificare php 74 è necessario procedere come segue:
```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__ , // Questa è la directory in cui si trova 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/*',
])
Specificare le regole e le cartelle che non si desidera applicare.
La cartella è '/nomecartella/*'
Il file è 'nomefile'.
Specificare regole come "SensitiveConstantNameRector" .
rector non trova la presenza nell'array PHP di un indice indefinito e lo riconosce solo come costante, quindi cerca di cambiarlo in modo errato. Quindi, viene aggiunto alle regole di esclusione.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Queste regole vengono escluse perché si tratta dello stile del codice.
Esecuzione
Ci sono due opzioni.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Questo comando mostra nella console solo i codici che necessitano di modifiche.
Dato che il codice sorgente potrebbe essere molto