PHP 規範說明與工具

> 做爲一個新手,寫出規範的代碼也是一門必修課,除了閱讀相應的代碼規範文檔以外,充分利用相關的工具能使得進階之路事半功倍。今天這篇分享將簡單地梳理一下 PHP 規範,並介紹一個代碼檢查工具 Code Sniffer,結合 PHPStorm 以及 GIT 進行實踐。php

PHP 規範

爲何須要統一代碼規範?html

PHP 社區百花齊放,擁有大量的函數庫、框架和組件。PHP 開發者一般會在本身的項目中使用若干個外部庫,所以 PHP 代碼遵循(儘量接近)同一個代碼風格就很是重要,這讓開發者能夠輕鬆地將多個代碼庫整合到本身的項目中。laravel

目前流行的一些規範:git

  • PSRgithub

    PSR 是 PHP Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP 規範,是 PHP 開發的實踐標準。shell

    PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小組)的縮寫,由幾位開源框架的開發者成立於 2009 年,從那開始也選取了不少其餘成員進來(包括但不限於 Laravel, Joomla, Drupal, Composer, Phalcon, Slim, Symfony, Zend Framework 等),雖然不是「官方」組織,但也表明了大部分的 PHP 社區。app

    項目的目的在於:經過框架做者或者框架的表明之間討論,以最低程度的限制,制定一個協做標準,各個框架遵循統一的編碼規範,避免各家自行發展的風格阻礙了 PHP 的發展,解決這個程序設計師由來已久的困擾。composer

    目前已表決經過了 6 套標準,已經獲得大部分 PHP 框架的支持和承認。框架

    詳細介紹請參考官方說明:ide

  • PEAR

    The PEAR Coding Standards apply to code that is part of the official PEAR distribution. Coding standards often abbreviated as CS among developers and they aim to keep code consistent to be easily readable and maintainable by most of PEAR folks.

    參考官方說明

  • Zend

    Zend Framework 使用的代碼規範。

    參考官方說明

Code Sniffer

官方網站:https://github.com/squizlabs/PHP_CodeSniffer

PHP_CodeSniffer is a set of two PHP scripts; the main phpcs script that tokenizes PHP, JavaScript and CSS files to detect violations of a defined coding standard, and a second phpcbf script to automatically correct coding standard violations. PHP_CodeSniffer is an essential development tool that ensures your code remains clean and consistent.

簡單來講,就是兩個小工具,

  • phpcs (PHP Code Standard),用來檢查代碼規範
  • phpcbf (PHP Code Beautifier and Fixer),用來自動修復代碼

安裝 Code Sniffer

參考官方文檔

使用 Code Sniffer

執行 phpcs 檢查代碼規範

$ phpcs /path/to/code/myfile.php

FILE: /path/to/code/myfile.php
--------------------------------------------------------------------------------
FOUND 5 ERRORS AFFECTING 4 LINES
--------------------------------------------------------------------------------
 2 | ERROR | [ ] Missing file doc comment
 3 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "false" but
   |       |     found "FALSE"
 5 | ERROR | [x] Line indented incorrectly; expected at least 4 spaces, found 1
 8 | ERROR | [ ] Missing function doc comment
 8 | ERROR | [ ] Opening brace should be on a new line
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------

Code-Sniffer 默認使用 PEAR 代碼規範。可使用 --standard=xxx 指定。

$ phpcs --standard=PSR2 /path/to/code/myfile.php

或者修改默認配置

$ phpcs --config-set default_standard Squiz

執行 phpcbs 修復代碼

$ phpcbf /path/to/code
Processing init.php [PHP => 7875 tokens in 960 lines]... DONE in 274ms (12 fixable violations)
    => Fixing file: 0/12 violations remaining [made 3 passes]... DONE in 412ms
Processing config.php [PHP => 8009 tokens in 957 lines]... DONE in 421ms (155 fixable violations)
    => Fixing file: 0/155 violations remaining [made 7 passes]... DONE in 937ms
Patched 2 files
Time: 2.55 secs, Memory: 25.00Mb

更多功能,參考官方文檔

與 PHP Storm 集成

將 Code Sniffer 與 PHP Storm 集成,可使 IDE 實時顯示代碼的規範狀況,提醒開發人員修改代碼,長期使用,可讓開發人員養成很是規範的代碼習慣。

ide

如何配置?

  1. 爲 PHPStorm 配置 Code Sniffer 路徑:

    ![code-sniffer](http://imgur.com/X4rIc0e.png)
    ![code-sniffer](http://imgur.com/TdqQVfz.png)
  2. 設置 Inspections

    選擇合適的 Coding Standard
    ![](http://imgur.com/hLmHbZo.png)

利用 GIT Hook 強制代碼檢查

使用 GIT 的 Pre-Commit Hook,能夠在代碼被提交以前,強制調用 Code Sniffer 進行代碼檢查,若是不符合規範,將阻止用戶提交代碼。

  1. 在項目的 .git/hooks 創建 pre-commit 文件
  2. 寫入代碼:

    [Pre-Commit Gist](https://gist.githubusercontent.com/yangzhyo/6dad52e862c5efa368c992efc52e1fb9/raw/dec18f55ddfdf6eeb6d659a19398ec2d106fface/pre-commit.php)

    試試看:)

相關文章
相關標籤/搜索