使用 PHP 語言開發網站服務時,採用各類框架後,其撰寫風格已定下八九成了,那為何還需要呢?主要用來提升產出品質。就像程式碼都能動,QA也驗證過,也上線服務百人千人了,這時有測試涵蓋率資訊,可以讓未來增減功能時,更加大膽。
稍微研究後,在 PHP 語言上,可以直接使用 PHP Coding Standards Fixer 工具,整體上還滿舒適的,裡頭有提到非常多編碼風格檢驗,基本上用預設的即可。備忘一下:
首先故意把 php-cs-fixer 安裝在程式碼上一層名為 tools 目錄,且 tools 內有 composer.phar 工具可用:
% mkdir -p tools/php-cs-fixer% php tools/composer.phar require --working-dir=tools/php-cs-fixer friendsofphp/php-cs-fixer
先列出當前目錄中,有哪些要修改的項目:
% cd src% ../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run --diff .
對當前目錄進行修正的用法:
% cd src% ../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix .
接著,可以把上面兩個指令包在 composer.json 中,靠 run-script 處理:
% cd src% cat composer.json | jq '.scripts'{"test": "phpunit","cs-diff": "../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run --diff .","cs": "../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix ."}
使用方式:
% ../tools/composer.phar run-script cs-diff> ../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run --diff .Loaded config default.Using cache file ".php-cs-fixer.cache".Checked all files in 0.032 seconds, 12.000 MB memory used
% ../tools/composer.phar run-script cs> ../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix .Loaded config default.Using cache file ".php-cs-fixer.cache".Fixed all files in 0.006 seconds, 12.000 MB memory used
接著,可以評估一下自己打算用哪些規範,從 PHP Framework Interop Group (簡稱PHP-FIG) 常見的推薦用法,就是要來個 PSR-12 就對了:
% cat test.php<?php$x = "hello world";$y = "123";% ../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run --using-cache=no --rules=@PSR12 -vvv test.phpPHP CS Fixer 3.8.0 BerSzcz against war! by Fabien Potencier and Dariusz Ruminski.PHP runtime: 7.4.29Loaded config default.. 1 / 1 (100%)Legend: ?-unknown, I-invalid file syntax (file ignored), S-skipped (cached or empty file), .-no changes, F-fixed, E-errorChecked all files in 0.005 seconds, 12.000 MB memory used
規則嚴一點,使用 Symfony framework 語法:
% ../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run --diff --using-cache=no --rules=@PSR12,@Symfony -vvv test.phpPHP CS Fixer 3.8.0 BerSzcz against war! by Fabien Potencier and Dariusz Ruminski.PHP runtime: 7.4.29Loaded config default.F 1 / 1 (100%)Legend: ?-unknown, I-invalid file syntax (file ignored), S-skipped (cached or empty file), .-no changes, F-fixed, E-error1) web/test.php (single_quote, binary_operator_spaces)---------- begin diff ------------- /Volumes/Data/project/src/test.php+++ /Volumes/Data/project/src/test.php@@ -1,5 +1,5 @@<?php- $x = "hello world";+ $x = 'hello world';- $y = "123";+ $y = '123';----------- end diff -----------Checked all files in 0.011 seconds, 12.000 MB memory used
進行修正:
% ../tools/php-cs-fixer/vendor/bin/php-cs-fixer fix --using-cache=no --rules=@PSR12,@Symfony test.phpLoaded config default.1) web/test.phpFixed all files in 0.011 seconds, 12.000 MB memory used% cat test.php<?php$x = 'hello world';$y = '123';
更多語法修正可以參考 github.com/FriendsOfPHP/PHP-CS-Fixer/blob/master/doc/rules/index.rst 解說,例如變數運算時的空白規劃,就可以參考 binary_operator_spaces 的設計。
沒有留言:
張貼留言