![translation](https://cdn.durumis.com/common/trans.png)
Ini adalah postingan yang diterjemahkan oleh AI.
Pilih Bahasa
Teks yang dirangkum oleh AI durumis
- Alat migrasi bernama Rector diperkenalkan untuk mengatasi masalah sintaks dan versi yang dihentikan setelah pemutakhiran versi php.
- Rector memeriksa dan memperbaiki sintaks kode PHP 5.3~8.2 agar sesuai dengan versi yang diinginkan.
- Untuk menggunakan Rector, Anda perlu menginstal Composer, membuat file konfigurasi rector.php, menentukan aturan dan folder yang tidak ingin diterapkan, dan menjalankannya.
Saat melihat situs web GNU Board 5, CMS PHP di Korea, saya menemukan beberapa postingan yang mengeluh tentang masalah yang dihadapi setelah meningkatkan versi PHP, seperti sintaks yang tidak lagi didukung dan versi yang tidak kompatibel.
Lalu saya mencari solusi...
Saat saya mengunjungi reddit, saya menemukan bahwa ada alat bernama rector yang dapat membantu dalam migrasi. Berikut adalah panduan tentang cara menggunakannya.
Sejak PHP 7.0 diluncurkan pada tahun 2015, telah muncul alat migrasi PHP seperti php cs-fixer, rector, dan sebagainya.
rector tampak lebih mudah digunakan.
rector (pengucapan: rector) dapat memeriksa dan memperbaiki sintaks kode PHP 5.3 hingga 8.2 sesuai dengan versi yang Anda inginkan.
Satu kekurangan rector adalah bahwa rector merupakan analis statis, sehingga tidak dapat mendeteksi kesalahan yang terjadi saat runtime.
Rector memerlukan instalasi composer, alat pengelola paket PHP.
1. Instal composer.
2. Instal rector di folder proyek Anda.
3. Buat file konfigurasi rector.php.
Konfigurasi rector.php
Untuk membantu pemahaman, saya akan membuat skenario.
Diasumsikan bahwa kode sumber adalah kode php 5.3 dan versi target yang ingin ditingkatkan adalah php 7.4.
Versi Rector adalah 1.0.3.
withPhpSets(php74: true)
->withParallel(1200, 8, 8)
->withPaths([
__DIR__ . '/src', // jalur kode sumber
])
->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 folder kode sumber dan konfigurasi versi PHP.
Fungsi withPhpSets menetapkan fungsi PHP yang ingin ditingkatkan.
Jika versi PHP yang menjalankan rector adalah php 8.0, maka
Anda dapat menggunakan sintaks php-versi: true.
Namun, jika versi PHP yang berjalan di bawah php 7.4
Anda tidak dapat menggunakan sintaks parameter bernama dalam fungsi, jadi Anda harus menetapkan true ketika versi yang Anda inginkan muncul.
rector mendukung php 8.3, jadi untuk menentukan php 74, Anda dapat menggunakan kode berikut:
->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__ , // Ini adalah direktori tempat rector.php berada.
])
->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/*',
Anda dapat menentukan aturan dan folder yang tidak ingin Anda terapkan.
Untuk folder, gunakan '/nama_folder/*'
Untuk file, gunakan 'nama_file'.
Saya menambahkan aturan "SensitiveConstantNameRector" karena
rector tidak dapat menemukan indeks yang tidak ditentukan dalam array PHP dan hanya mengenalinya sebagai konstanta, sehingga mencoba mengubahnya secara tidak benar. Oleh karena itu, saya menambahkannya ke aturan pengecualian.
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
Aturan ini terkait dengan gaya kode, jadi saya mengecualikannya.
Jalankan
Ada dua cara:
Perintah ini hanya akan menampilkan kode yang perlu diubah di konsol.
Semakin banyak kode sumber, semakin banyak RAM yang dibutuhkan. Oleh karena itu, Anda perlu menentukan RAM yang digunakan dengan opsi --memory-limit=2G.
Perintah ini akan langsung mengubah kode sumber.
Anda perlu memeriksa dengan git karena mungkin ada opsi yang tidak diinginkan atau kesalahan.