[Sublime 4] CodeFormatter 套件不支援 PHP8 問題

我把自己電腦 PHP 版本升級到 8.2,CodeFormatter 就壞了,噴出 Call to undefined function each() error。
發生原因是程式裡面有用到 each() function,而這個 function 在 PHP 7.2 起被廢棄,並自 PHP 8.0 起被移除,所以才會出現找不到 function 的情況。

解決方式有兩個:

一、指定較低版本的 PHP

開啟套件設定檔,調整 php_path 為較低版本的 PHP,例如:
"codeformatter_php_options":
{
    ...
    
    "php_path": "C:/AppServ/php7/php.exe",
    
    ...
},

二、更新套件裡的 phpf.phar 程式

可以從 這裡 下載 fmt.phar,更名後替換掉原本的 phpf.phar。
※ phpf.phar 路徑為 C:\Users\user\AppData\Roaming\Sublime Text\Packages\CodeFormatter\codeformatter\lib\phpbeautifier\phpf.phar

三、更新

由於新的 phpf.phar 對於程式中含 namespace 的型態變數 format 有問題,又找不到比較好的 phpf.phar,所以棄用,改用套件 phpfmt。
public function FunctionName(App\Models\User $user)
{
    //
}

// 會變成↓

public function FunctionName(App\Models\User$user)
{
    //
}
參考文件

留言