前言
編程語言都有一套專屬的語法,循其法而編其碼,方能被該語言的編譯器識別,從而編譯成低級語言,被機器識別。而語法規(guī)范不了編碼風格,編碼風格是由程序員決定的,程序員的思想的天馬行空,也造就了風格迥異的代碼。程序員秉承著開放的精神,揮舞著民主自由的大旗,在編碼的世界里馳騁、翱翔。
這樣的代碼不可謂之不好,只是長此以往,會產生一些聲音,“這樣寫更好”,“那樣寫更棒”,“你寫的太亂了”,“我寫的是標準化”,“太難維護了”,“不夠優(yōu)雅”等等。諸如此類,在歷經歲月的長河之后,《最佳實踐》便出現了,本著百尺竿頭更近一步的方針,順其自然的上升到了業(yè)界標準,由一群致力于簡潔、優(yōu)雅、美觀、大方的程序員維護著,并矢志不渝的遵守著,也給后來人一些方向。
它雖然限制了編碼風格,但因此編碼風格統(tǒng)一了,也就讓代碼變得更加優(yōu)雅、易讀、易維護、易開發(fā)。無論對于個人以及團隊而言,它都是一劑溫和的修正藥。你服用了這劑藥,那么也意味著你開源的代碼中,多了一些人能夠讀懂;讓你團隊代碼審核員更加明白你的思緒,讓你的代碼能夠被多數人認可,讓你的代碼讓多數人讀懂。
編碼規(guī)范的出現,也促生了相應的格式化工具,可能僅需一條命令,你的代碼就可以符合編碼規(guī)范,也就成了編碼風格的最佳實踐,也就是說,在編碼的過程中你可以不必糾結于編碼中排版、縮進等等繁瑣的約束,而開心愉悅編碼。
類似的工具有php-cs-fixer、es-lint等等。
閑言少敘,書歸正傳。今天要講的是 PHP 編碼規(guī)范以及 php-cs-fixer 格式化工具。
對于PHP而言,有一套編碼規(guī)范供大家參考,也就是PSR(PHP Standard Recommendations ),由 PHP FIG 組織制定的 PHP 規(guī)范,是 PHP 開發(fā)的實踐標準。
php-cs-fixer 是一個開源的 PSR 編碼規(guī)范的格式化工具。
依托 Laravel 框架,安裝 php-cs-fixer
你可以在 Packagist 或者 Github 查找 php-cs-fixer
工具。
- 安裝
composer require friendsofphp/php-cs-fixer --dev
一般情況下,僅在開發(fā)環(huán)境使用
-
創(chuàng)建配置文件
image.png
如果你安裝完成了,你在 vendor/friendsofphp/php-cs-fixer
下會發(fā)現一個 .php_cs.dist
文件,它是默認的格式化配置,將其復制到項目根目錄下 。
- 配置信息解讀
如果你閱讀文檔了,你會知道在該文件中應該返回一個 PhpCsFixer\ConfigInterface,它提供了相關的接口去設置驗證規(guī)則 (setRules)、需要排除的文件(notPath)、忽略的目錄(exclude)等。在規(guī)則中,你可以設置一些自定義的規(guī)則,比如生成注釋頭信息(header-comment)等。
更多使用規(guī)則請查閱 文檔
- 執(zhí)行格式化命令
在你安裝完成之后,會自動在你的vendor/bin/php-cs-fixer
命令,你就可以使用該命令去格式化你的項目了。
vendor/bin/php-cs-fixer fix
該命令會自動生成一個
.php_cs.cache
文件,為配置緩存文件。
- 效果
此時你可能會發(fā)現它更改了較多的文件,而被莫名其妙的加入一些注釋信息,不用擔心,這是配置文件中配置的,這些配置你都可以通過修改配置文件調整。
.gitignore
.php_cs.dist
或 .php_cs
文件應該是要被添加到版本控制之中,因為它就是用來規(guī)范代碼風格。而 .php_cs.cache
文件你就可以排除版本控制之外,加入到 .gitignore
文件之中。
命令的提煉
你可以能對 vendor/bin/php-cs-fixer
命令感覺不是很方便,我們更容易理解的是composer
或artisan
命令,那么就可以對其進行封裝一下。
composer run-script
此時你需要的在 composer.json
的 scripts
增加一個腳本,就像下面這樣。
"scripts": {
"phpcs": "vendor/bin/php-cs-fixer fix",
...
},
此時,你就可以這樣使用了。
composer run-script phpcs
artisan
Artisan 命令需要使用到 shell_exce()
函數,它能夠支持執(zhí)行 shell 命令。
<?php
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace App\Console\Commands;
use Illuminate\Console\Command;
class PHPCs extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'php:cs';
/**
* The console command description.
*
* @var string
*/
protected $description = '格式化代碼';
/**
* Create a new command instance.
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
shell_exec('vendor/bin/php-cs-fixer fix');
}
}
寫在后面
其實一直沒對編碼風格這塊做一些研究,經常是以 Laravel 作者的風格作為編碼的風格。該篇文章是受開源項目 一刻社區(qū) 啟發(fā),發(fā)現其引用的該組件,于是做了一番學習,才有了此篇文章,如果你感覺有一點點收獲,那么請不要吝惜你的贊賞,哈哈哈。