Teks yang dirangkum oleh AI durumis
- Kami memperkenalkan alat migrasi bernama Rector untuk menyelesaikan masalah sintaksis dan versi yang dihentikan dukungannya setelah peningkatan versi PHP.
- Rector dapat memeriksa dan memperbaiki sintaksis kode PHP versi 5.3~8.2 sesuai dengan versi yang diinginkan.
- Untuk menggunakan Rector, diperlukan langkah-langkah seperti menginstal Composer, menulis file konfigurasi rector.php, menentukan aturan dan folder yang tidak ingin diaplikasikan, dan menjalankannya.
Sumber situs web CMS php Korea, GNUboard5, setelah peningkatan versi php ada beberapa keluhan mengenai sintaks yang sudah tidak didukung lagi dan versi yang dihentikan. Jadi saya mencari-cari..
reddit dan saya temukan tools bernama rector yang disebutkan bisa membantu migrasi. Saya bagikan cara pakainya.
Setelah PHP 7.0 dirilis pada tahun 2015, ada banyak tools migrasi php yang bermunculan, seperti php cs-fixer, rector, dll.
rector kelihatannya lebih mudah digunakan.
rector (diucapkan: rector) memeriksa dan memperbaiki sintaks kode PHP 5.3 ~ 8.2 sesuai versi yang diinginkan.
Satu hal yang disayangkan adalah rector adalah static analyzer sehingga tidak bisa mendeteksi kesalahan yang terjadi saat runtime.
Rector membutuhkan tools manajemen paket php bernama composer untuk diinstal.
1. Instal composer.
2. Instal rector di folder proyek yang sekarang.
```php composer require rector/rector --dev
3. Buat file konfigurasi rector.php .
Konfigurasi rector.php
Saya tentukan situasinya untuk membantu pemahaman.
Source code targetnya adalah kode php5.3 dan target versi upgrade-nya adalah php 7.4 secara hipotesis.
Versi Rector adalah 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', // source code path ]) ->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() menetapkan source code folder, PHP version configuration.
Fungsi withPhpSets menetapkan PHP function yang ingin diupgrade.
Jika PHP version yang menjalankan rector adalah php 8.0
```php ->withPhpSets(php74: true)
Anda dapat melakukan hal ini: php version : true .
Akan tetapi, jika PHP yang dijalankan adalah php 7.4 atau yang lebih rendah
Anda harus menetapkan true ketika versi yang diinginkan muncul karena sintaks parameter yang diberi nama tidak dapat digunakan pada fungsi.
rector mendukung php 8.3. Untuk menentukan php 74, seperti ini:
```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__ , // directory berisi 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/*',
])
Tentukan folder dan aturan yang tidak ingin diterapkan.
Folder: '/folder name/*'
File: 'file name'
Aturan: "SensitiveConstantNameRector" ditambahkan
rector tidak dapat menemukan undefined index di array PHP dan hanya mengenalinya sebagai konstanta sehingga salah mengubahnya. Itulah mengapa ditambahkan ke aturan pengecualian.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
Aturan ini dikecualikan karena merupakan code style.
Cara menjalankan
Ada dua cara.
```bash vendor/bin/rector --dry-run --memory-limit=2G
Perintah ini hanya mencetak kode yang perlu diubah ke konsol.
Anda harus menentukan penggunaan RAM dengan opsi --memory-limit=2G karena source code semakin besar, RAM semakin banyak yang diperlukan.
```bash vendor/bin/rector --memory-limit=2G
Perintah ini langsung memodifikasi source code.
Anda harus melakukan pengecekan dengan git karena mungkin terdapat opsi yang tidak diinginkan atau kesalahan.