Texto resumido pela IA durumis
- Foi apresentada a ferramenta de migração Rector para resolver problemas de sintaxe e versão descontinuados após a atualização do PHP.
- O Rector verifica e corrige a sintaxe do código PHP de 5.3 a 8.2 de acordo com a versão desejada.
- Para usar o Rector, é necessário instalar o Composer, criar o arquivo de configuração rector.php, especificar as regras e pastas a serem aplicadas e, em seguida, executá-lo.
Em um site de cms php coreano, o GurupoB5 após a atualização da versão do php, há alguns textos que apelam pela interrupção do suporte de gramática e versões.
Então, enquanto procurava...
Fui ao Reddit e vi que uma ferramenta chamada rector ajuda na migração e apresentarei como usá-la.
Após o PHP 7.0 lançado em 2015, a ferramenta de migração php foi lançada, php cs-fixer, rector, etc.
rector parece ser mais fácil de usar.
rector (pronúncia: léitor) verifica a gramática do código do PHP 5.3 ~ 8.2 e a corrige para a versão desejada.
Uma coisa triste é que o rector é um analisador estático, portanto não consegue detectar erros de tempo de execução.
O Rector precisa que o Composer esteja instalado, que é uma ferramenta de gerenciamento de pacotes php.
1. Instale o Composer.
2. Instale o rector na pasta do projeto atual.
```php composer require rector/rector --dev
3. Crie o arquivo de configuração rector.php.
Configuração do rector.php
Vou definir um cenário para facilitar a compreensão.
O código-fonte de destino é o código php5.3 e presumirei que a versão de atualização de destino é o php 7.4.
A versão do 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', // Caminho do código fonte ]) ->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, ]);
O RectorConfig::config() define a pasta do código-fonte e a configuração da versão do PHP.
A função withPhpSets define a função PHP que será atualizada.
Caso a versão atual do php que executa o rector seja a 8.0
```php ->withPhpSets(php74: true)
Você pode fazê-lo como php versão: true.
No entanto, se a versão do PHP em execução for inferior a 7.4
Como não é possível usar a sintaxe do parâmetro com nome na função, o true precisa ser definido quando a versão desejada for exibida.
Como o rector oferece suporte ao php 8.3, para especificar o php 74, faça como abaixo.
```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__
, // É o diretório em que o rector.php está localizado.
])
```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/*',
])
Ele especifica as regras e pastas que você não deseja aplicar.
Pasta é '/nome_da_pasta/*'
Arquivo é 'nome_do_arquivo'
Adicionei a regra "SensitiveConstantNameRector", mas o rector não a encontra no índice undefined do array PHP e a reconhece apenas como uma constante, então tenta trocá-la incorretamente. Portanto, vou adicioná-la à regra de exceção.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Excluirei essas regras porque são o estilo do código.
Executar
Há duas maneiras.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Esse comando apenas exibirá na consola os códigos que precisam ser alterados.
Como quanto mais código-fonte, mais RAM é necessária, você deve especificar o uso de