초록 기린

PHP 版本升級工具 Rector 簡介

  • 撰写语言: 韓国語
  • 基准国家: 所有国家country-flag
  • 信息技术

撰写: 2024-03-24

撰写: 2024-03-24 23:17

在瀏覽韓國的 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 來追蹤程式碼變更。



评论0