- 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 总结的文章
- 介紹如何利用 PHP 版本升級工具 Rector 將 PHP 5.3 程式碼遷移到 PHP 7.4。
- 安裝 Composer 後,將 Rector 安裝到您的專案,並透過 rector.php 設定檔指定要升級的程式碼和 PHP 版本。
- 透過設定修正規則和執行來自動修正程式碼,並使用 Git 管理變更,以確保升級過程的安全。
在瀏覽韓國的 PHP CMS Gnuboard5 網站時,發現一些文章提到 PHP 版本升級後,某些語法和版本不再支援,
造成許多困擾。因此,我在尋找解決方案的過程中...
看到了 Reddit 上的討論,有人建議使用 Rector 這個工具來協助遷移,因此我將介紹其使用方法。
自 2015 年 PHP 7.0 發布以來,就出現了一些 PHP 遷移工具,例如 php cs-fixer、Rector 等。
而 Rector 使用起來似乎更加方便。
Rector(發音:雷克特)可以檢查 PHP 5.3 到 8.2 的程式碼,並根據您指定的版本修正語法。
不過,Rector 是一個靜態分析器,因此無法偵測執行時期發生的錯誤。
Rector 需要您的系統已安裝 PHP 套件管理工具 Composer。
1. 安裝 Composer。
2. 在您的專案資料夾中安裝 Rector。
3. 建立設定檔 rector.php。
rector.php 設定
為了方便理解,我們先設定一個情境。
假設目標程式碼是 PHP 5.3,並且我們要升級到 PHP 7.4 版本。
Rector 版本為 1.0.3。
RectorConfig::config() 用於設定程式碼資料夾和 PHP 版本。
withPhpSets 函式用於設定要升級的 PHP 函式。
如果目前執行 Rector 的 PHP 版本為 PHP 8.0,
可以這樣設定 PHP 版本:true。
但如果執行中的 PHP 版本低於 PHP 7.4
則無法使用函式中的具名參數語法,因此您需要在對應的版本位置設定 true。
Rector 支援 PHP 8.3,因此如果您要指定 PHP 7.4,則需要如下設定:
->withPaths([
__DIR__ , // rector.php 所在的目錄。
])
指定您不想套用的規則和資料夾。
資料夾格式為 '/資料夾名稱/*'
檔案格式為 '檔案名稱'。
在規則部分,我添加了 "SensitiveConstantNameRector",
因為 Rector 在 PHP 陣列中遇到未定義索引時,無法正確識別,而是將其視為常數,並嘗試進行不正確的修改。因此,我將其加入排除規則中。
這些規則與程式碼風格相關,因此我選擇排除。
執行
有兩種方式可以執行。
此指令只會將需要修改的程式碼列印到主控台。
程式碼量越大,所需的記憶體就越多,因此您需要使用 --memory-limit=2G 參數來指定使用的記憶體限制。
此指令會直接修改程式碼。
由於 Rector 的選項非常多,因此可能會套用一些您不想要的選項,建議您使用 Git 來追蹤程式碼變更。