PSR規(guī)范代工廠之 php-cs-fixer 的代碼合規(guī)之路

前言

編程語言都有一套專屬的語法,循其法而編其碼,方能被該語言的編譯器識別,從而編譯成低級語言,被機器識別。而語法規(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 工具。

  1. 安裝
composer require friendsofphp/php-cs-fixer --dev

一般情況下,僅在開發(fā)環(huán)境使用

  1. 創(chuàng)建配置文件


    image.png

如果你安裝完成了,你在 vendor/friendsofphp/php-cs-fixer 下會發(fā)現一個 .php_cs.dist 文件,它是默認的格式化配置,將其復制到項目根目錄下 。

  1. 配置信息解讀
    如果你閱讀文檔了,你會知道在該文件中應該返回一個 PhpCsFixer\ConfigInterface,它提供了相關的接口去設置驗證規(guī)則 (setRules)、需要排除的文件(notPath)、忽略的目錄(exclude)等。在規(guī)則中,你可以設置一些自定義的規(guī)則,比如生成注釋頭信息(header-comment)等。

更多使用規(guī)則請查閱 文檔

  1. 執(zhí)行格式化命令
    在你安裝完成之后,會自動在你的 vendor/bin/php-cs-fixer 命令,你就可以使用該命令去格式化你的項目了。
vendor/bin/php-cs-fixer fix
image.png

該命令會自動生成一個 .php_cs.cache 文件,為配置緩存文件。

  1. 效果
    此時你可能會發(fā)現它更改了較多的文件,而被莫名其妙的加入一些注釋信息,不用擔心,這是配置文件中配置的,這些配置你都可以通過修改配置文件調整。
image.png

.gitignore

.php_cs.dist.php_cs 文件應該是要被添加到版本控制之中,因為它就是用來規(guī)范代碼風格。而 .php_cs.cache 文件你就可以排除版本控制之外,加入到 .gitignore 文件之中。

命令的提煉

你可以能對 vendor/bin/php-cs-fixer 命令感覺不是很方便,我們更容易理解的是composerartisan 命令,那么就可以對其進行封裝一下。

composer run-script

此時你需要的在 composer.jsonscripts 增加一個腳本,就像下面這樣。

    "scripts": {
        "phpcs": "vendor/bin/php-cs-fixer fix",
        ...
    },

此時,你就可以這樣使用了。

composer run-script phpcs
image.png

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ā)現其引用的該組件,于是做了一番學習,才有了此篇文章,如果你感覺有一點點收獲,那么請不要吝惜你的贊賞,哈哈哈。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容

  • Awesome PHP 一個PHP資源列表,內容包括:庫、框架、模板、安全、代碼分析、日志、第三方庫、配置工具、W...
    guanguans閱讀 5,774評論 0 47
  • Composer Repositories Composer源 Firegento - Magento模塊Comp...
    零一間閱讀 3,965評論 1 66
  • 前言:良好的代碼規(guī)范可以提高代碼可讀性,減少團隊溝通維護成本,所以本文嘗試PSR-2代碼規(guī)范進行代碼格式化。 正文...
    Emotion_c293閱讀 6,414評論 1 2
  • Laravel 學習交流 QQ 群:375462817 本文檔前言Laravel 文檔寫的很好,只是新手看起來會有...
    Leonzai閱讀 7,994評論 2 12
  • 第二次課的五天時間又過去了,這五天主要的學習是什么呢? ※找關鍵詞,提煉重點 ※找出合適的邏輯結構 ※結合視覺化呈...
    華楓閱讀 1,038評論 2 8