在專案開發的時候,專案架構搭建時團隊就會設定 php code style 檢查,避免整個開發團隊大家走出自己的風格,尤其是兩格空白還是四格空白,總是會有不同意見,這時候定義出團隊code style,並透過配置Github Action CI(Continuous Integration)來幫助我們提交代碼時進行檢查,避免出現如下圖的問題(歪)
接下來我們就為自己專案安裝squizlabs/php_codesniffer套件,並設定檢查規則,搭建Github Action在提交時替我們先做程式碼的檢查,通常我都是本地開發完畢自己會在跑過一次確認無誤,在推送到開發分支上,接著我們來安裝套件。
composer require --dev squizlabs/php_codesniffer
根據官方文件說明,PHP_CodeSniffer 內含兩個 PHP 腳本,一個為phpcs
腳本對 PHP、JavaScript 和 CSS 檔案進行檢查,以偵測是否違反了已定義的編碼標準,而第二個腳本則會自動修正違反phpcbf
編碼標準的情況
./vendor/bin/phpcs //檢查規則
./vendor/bin/phpcbf //修正違反編碼標準
安裝完畢後根據文件說明,預設編碼標準是 PEAR 編碼標準,而PEAR解釋如下
而文件也說到你可以根據你想要的編碼標準去設定,例如常見的PSR標準,而這裡我會使用PSR-12 作為預設標,而你可以在執行時,使用 --standard=PSR12 指令來執行。
./vendor/bin/phpcs ./ --standard=PSR12
但這樣檢查程式碼就等於全部專案內的文件都會掃過一次,如果按照PSR12標準就會噴出非常多的ERROR,這時候就可以根據建立自定義文件phpcs.xml
來定義自己團隊想要有的規則,可以根據查看這個說明敘述。
接著我們可以直接複製一份官方的phpcs.xml.dist
到我們自己的專案目錄下,而自定義規則可以參考這篇Customisable Sniff Properties,這邊解釋了許多規則用法,可以參考使用,或是實在不知道該怎麼用,也可以使用這個工具選一選自動幫你產生phpcs.xml
檔案內容。
而看不懂phpcs.xml.dist
也沒關係,套件wiki指引上有提供附註解的檔案Annotated Ruleset可以參考,而如果你覺得PHP_CodeSniffer 提供的sniffs不敷使用,還可以多安裝一個Slevomat PHP_CodeSniffer來增加額外的規則。
而每個文檔對於sniffs都有給出很多範例解釋這些使用方式,因為太多了就不一一解釋,大家可以好好看著文檔配飯吃(誤)。
大致上配置如下
註:有些錯誤訊息,他在執行時不會產生出來,可以透過<severity>8</severity>
這個tag將錯誤訊息顯示出來,根據文件說明在 PHP CodeSniffer 中,"嚴重程度" 是一個值,用於評估錯誤或警告的重要性,其範圍通常從 1 到 8,而當你將嚴重程度設定為低值(比如 1 或 2)時,表示這個錯誤或警告被視為較不重要,通常不會在默認情況下顯示在輸出中,而文件預設嚴重程度為 (5)
可以查看以下英文說明。相反,當嚴重程度設定為較高值(比如 7 或 8)時,表示這個錯誤或警告非常重要,會在默認情況下顯示在輸出中,並且可能會導致程式碼檢查失敗。。
We also drop the severity of this message from the default value (5) so that it is hidden by default. It can be displayed by setting the minimum severity on the PHP_CodeSniffer command line. This is great if you want to use some messages only in code reviews and not have them block code commits.
基本設定都差不多後,執行相關代碼,有錯誤訊息就會如下圖這樣。
接著配置Github Action檢查,這邊根據github規範新建一個./github/workflows 資料夾,並在裡面命名一個yaml檔來配置。
接著將專案直接推上去,目前我只有一個branch name develop,而github action 可以根據 on 參數決定你要執行哪種操作,可以參考Github Action 文件。
以下就是github action 執行畫面,可以看到檢查錯誤的部分。
以上就是配置PHP_CodeSniffer跟自定義規則phpcs.xml,接著丟到github action進行程式碼的檢查整個流程,之後 side project 有寫單元測試的時候還可以再增加測試的指令~~大家可以試著配置看看~~