- GitHub - rectorphp/rector: Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
- Instant Upgrades and Automated Refactoring of any PHP 5.3+ code - rectorphp/rector
โพสต์นี้แปลโดย AI
บทสรุปของโพสต์โดย durumis AI
- บทความนี้จะแนะนำวิธีการใช้ Rector ซึ่งเป็นเครื่องมือสำหรับอัปเกรดเวอร์ชัน PHP เพื่อย้ายโค้ด PHP 5.3 ไปยัง PHP 7.4
- หลังจากติดตั้ง Composer แล้ว ให้ติดตั้ง Rector ในโปรเจกต์ และกำหนดโค้ดเป้าหมายและเวอร์ชัน PHP ในไฟล์กำหนดค่า rector.php
- กำหนดกฎการแก้ไขและเรียกใช้เพื่อแก้ไขโค้ดโดยอัตโนมัติ และจัดการการเปลี่ยนแปลงผ่าน Git เพื่อความปลอดภัยในการอัปเกรด
ขณะที่กำลังดูเว็บไซต์ของ Gnuboard5 ซึ่งเป็น PHP CMS ของเกาหลี ฉันพบว่ามีโพสต์จำนวนหนึ่งที่ร้องเรียนเกี่ยวกับปัญหาที่เกิดขึ้นหลังจากอัปเกรดเวอร์ชัน PHP ซึ่งเป็นเพราะไวยากรณ์และเวอร์ชันที่เลิกสนับสนุนแล้ว
ดังนั้นฉันจึงค้นหาต่อและ...
พบว่าใน Reddit มีคนแนะนำเครื่องมือชื่อ Rector ที่สามารถช่วยในการโยกย้าย ดังนั้นฉันจึงขอแนะนำวิธีการใช้งาน
หลังจากที่ PHP 7.0 เปิดตัวในปี 2015 ก็มีเครื่องมือสำหรับการโยกย้าย PHP ออกมา เช่น php cs-fixer และ Rector เป็นต้น
โดยส่วนตัวแล้วคิดว่า Rector ใช้งานง่ายกว่า
Rector (ออกเสียงว่า เร็กเตอร์) เป็นเครื่องมือที่สามารถตรวจสอบไวยากรณ์และแก้ไขโค้ด PHP ตั้งแต่เวอร์ชัน 5.3 ถึง 8.2 ให้ตรงตามเวอร์ชันที่ต้องการ
อย่างไรก็ตาม ข้อเสียของ Rector คือเป็นเครื่องมือวิเคราะห์แบบ Static Analyzer ดังนั้นจึงไม่สามารถตรวจจับข้อผิดพลาดที่เกิดขึ้นในขณะรันไทม์ได้
Rector ต้องการให้ Composer ซึ่งเป็นเครื่องมือจัดการแพ็กเกจของ PHP ติดตั้งอยู่ก่อน
1. ติดตั้ง Composer
2. ติดตั้ง Rector ในโฟลเดอร์โครงการปัจจุบัน
3. สร้างไฟล์กำหนดค่า rector.php
การตั้งค่า rector.php
เพื่อให้ง่ายต่อการทำความเข้าใจ ฉันจะตั้งสถานการณ์จำลองขึ้นมา
สมมติว่าโค้ดต้นฉบับเป็นโค้ด PHP 5.3 และเป้าหมายในการอัปเกรดคือ PHP 7.4
เวอร์ชัน Rector ที่ใช้คือ 1.0.3
RectorConfig::config() ใช้สำหรับกำหนดโฟลเดอร์ของโค้ดต้นฉบับและการตั้งค่าเวอร์ชัน PHP
ฟังก์ชัน withPhpSets ใช้สำหรับกำหนดฟังก์ชัน PHP ที่ต้องการอัปเกรด
ถ้าเวอร์ชัน PHP ที่ใช้รัน Rector เป็น PHP 8.0
สามารถตั้งค่า php เวอร์ชัน: true ได้แบบนี้
แต่ถ้าเวอร์ชัน PHP ที่รันอยู่เป็น PHP 7.4 หรือต่ำกว่า
จะไม่สามารถใช้ไวยากรณ์ของพารามิเตอร์ที่มีชื่อในฟังก์ชันได้ ดังนั้นจึงต้องตั้งค่า true ตามเวอร์ชันที่ต้องการ
Rector รองรับ PHP 8.3 ดังนั้นหากต้องการกำหนด PHP 7.4 ให้ทำดังนี้
->withPaths([
__DIR__ , // ไดเร็กทอรีที่ไฟล์ rector.php อยู่
])
ใช้สำหรับกำหนดกฎและโฟลเดอร์ที่ไม่ต้องการให้ใช้
โฟลเดอร์ใช้รูปแบบ '/ชื่อโฟลเดอร์/*'
ไฟล์ใช้รูปแบบ 'ชื่อไฟล์'
กฎที่เพิ่มเข้ามาคือ "SensitiveConstantNameRector"
Rector จะไม่สามารถตรวจจับ undefined index ในอาร์เรย์ PHP ได้ และจะตีความว่าเป็นค่าคงที่ ทำให้เกิดการแก้ไขที่ผิดพลาด ดังนั้นจึงต้องเพิ่มกฎการยกเว้นนี้เข้าไป
กฎเหล่านี้เป็นเรื่องของรูปแบบโค้ด ดังนั้นจึงยกเว้นไว้
วิธีการรัน
มี 2 วิธี
คำสั่งนี้จะแสดงโค้ดที่จะต้องแก้ไขในคอนโซลเท่านั้น
เนื่องจากโค้ดต้นฉบับอาจมีจำนวนมาก จึงจำเป็นต้องกำหนดหน่วยความจำที่ใช้ โดยใช้ตัวเลือก --memory-limit=2G
คำสั่งนี้จะแก้ไขโค้ดต้นฉบับโดยตรง
เนื่องจากมีตัวเลือกมากมาย อาจมีตัวเลือกที่ไม่ต้องการใช้งานอยู่ ดังนั้นจึงควรตรวจสอบการเปลี่ยนแปลงโดยใช้ Git