PHP 之前為人所詬病的地方就是沒有統一的撰寫風格以及結構,MVC 觀念興起後,PHP 也出了不少框架,在架構方面得到了很大的改善,但 coding style 還是存在很大的問題,假設 A 公司跟 B 公司都有自己的 convention,那還是沒有所謂的 standard 存在,所以有一個團體制定了一個標準 PHP-FIG,裡面有各種程式碼的撰寫規範,當然這是一種形式上的規範,你不照他那樣寫 PHP 也是會動,只是如果有在使用 github 套件,以及使用 MVC framework 的人,會發現知名熱門的框架幾乎都往這邊靠了,所以如果花點時間去看他的規範參考,之後你接觸其他人的東西速度會快很多。
今天要介紹的不是規範的內容,有慶去的可以去看 Apple 大的投影片,他已經把比較多重要的內容放上來了,今天我要介紹的是工具,PHP-CS-Fixer,這個工具是可以幫你整理現行的 php code,假設你公司已經有許多歷史包袱,但你很想把你看到的內容都整理成 psr-0
,psr-2
,只要執行這個工具就可以幫你完成,我們來寫一下超不符合規定的 code。
psr.php
$name = 'Chan'; if($name !== '') echo "hi, my name is {$name}" . PHP_EOL; for($i = 1; $i <=10; $i++){ echo $i . PHP_EOL; } function test() { }
上面的程式碼有幾個不符合規定的項目:
if
的寫法不可以省略{}
- 歪七扭八的 format 如
for(
應該要for (
- 結尾有多餘的 trailing white space
function
的{}
要換行
安裝好了 PHP-CS-Fixer 之後,打開 terminal 並跑去我們剛檔案的位置,執行下面的指令:
php-cs-fixer.phar fix psr.php
結果
$name = 'Chan'; if ($name !== '') { echo "hi, my name is {$name}".PHP_EOL; } for ($i = 1; $i <= 10; ++$i) { echo $i.PHP_EOL; } function test() { }
php-cs-fixer
預設值是跑 symphony
的結構,會改變一些東西,如 空格.空格
會變成 .
, for ($i = 1; $i <= 10; $i++)
會變成 for ($i = 1; $i <= 10; ++$i)
,但完全不會影響現行程式的運行,或許你會不喜歡,那可以加上參數 --level=psr2
,這樣的結果就會做出只針對 psr2
的修正。
php-cs-fixer.phar fix psr.php --level=psr2
加上 --level=psr2 結果
$name = 'Chan'; if ($name !== '') { echo "hi, my name is {$name}" . PHP_EOL; } for ($i = 1; $i <=10; $i++) { echo $i . PHP_EOL; } function test() { }
不過你可以看到 psr-2
並沒有幫你把 $i <=10
變成 $i <= 10
的格式,所以可以憑自己喜好選擇,而 vim 有 vim-php-cs-fixer 可以直接支援在 vim 裡面直接使用 php-cs-fixer
,安裝以後執行 <leader>pcf
表示修正目前檔案,<leader>pcd
則是修正目前檔案所屬資料夾下所有的檔案,相當方便。
沒有留言:
張貼留言