編碼的世界 / 優質文選 / 文明

學習使用PHP_CodeSniffer(一)


2021年10月28日
-   

認識PHP_CodeSniffer    PHP_CodeSniffer是PEAR中的一個用PHP5寫的用來檢查嗅探PHP代碼是否有違反一組預先設置好的編碼標准的一個包,它是確保你的代碼簡潔一致的必不可少的開發工具,甚至還可以幫助程序員減少一些語義錯誤。
安裝PHP_CodeSniffer    如果你的WEB服務器上已經安裝了PHP和PEAR,那麼直接運行下列命令就可以安裝PHP_CodeSniffer。
$ pear install PHP_CodeSniffer    安裝後,你可以在命令行敲入命令phpcs來調用PHP_CodeSniffer檢查代碼,默認情況下,PHP_CodeSniffer采用的是PEAR的編碼標准;你現在就可以嘗試一下用它來檢查你的代碼是否符合編碼標准,如:$ phpcs /path/to/code/yourfile.php 如果要檢查一個目錄,則應使用下列命令:$ phpcs /path/to/codePHP_CodeSniffer的使用方法    使用PHP_CodeSniffer的主程序是phpcs,它的具體使用方法我們可以通過在命令行運行下列命令來獲得phpcs的相關參數及相應的使用信息。$ phpcs -h

使用PHP_CodeSniffer檢查文件或文件目錄    使用PHP_CodeSniffer的最簡單的方式是直接給phpcs傳遞一個路徑。如果路徑是指向一個文件目錄,那麼PHP_CodeSniffer會檢查該文件目錄及其也有了目錄中的所有文件。如果你不希望檢查所有子目錄,你可以加上-l(locally)參數,這樣它只會檢查當前目錄中的文件。
$ phpcs /path/to/code/myfile.inc$ phpcs /path/to/code/my_dir
    你也可以同時指定多個文件或目錄以供PHP_CodeSniffer檢查。
$ phpcs /path/to/code/myfile.inc /path/to/code/my_dir

控制PHP_CodeSniffer輸出的檢查結果    PHP_CodeSniffer在檢查完文件之後會給你一個錯誤報告,列出所有文件中違反編碼標准的錯誤和警告信息。

    如果你不想在輸出的檢查結果中包含警告信息(WARNING),你可以給phpcs加上-n參數。
    默認情況下,檢查完文件後PHP_CodeSniffer會輸出所有的錯誤和警告信息的列表,通常是很長的,尤其是在檢查比較多的文件的時候,列表很長而且速度很快,你根本看不到什麼。這個時候你可能只需要知道每個文件各自都有多少個錯誤和警告信息,你可以使用 report=summary 參數。
$ phpcs report=summary /path/to/code
    此外,PHP_CodeSniffer還可以將檢查結果以xml,csv和類似於Checkstyle輸出結果的格式輸出,這樣方便你在你自己的腳本中對檢查結果進步分析處理或者提供給支持Checkstyle的應用程序處理。
$ phpcs report=checkstyle /path/to/code
$ phpcs report=csv /path/to/code
$ phpcs report=checkstyle /path/to/code
注:在以csv格式輸出檢查結果時,輸出結果的第一行指示了檢查結果信息的順序(即哪一列對就著什麼信息)。
    另外,PHP_CodeSniffer在處理過程中不輸出任何信息直到處理結束輸出檢查結果。在處理比較多的文件時,有可能需要等待比較長的時間,如果你想知道在此過程中發生了什麼事情,你可以在執行PHP_CodeSniffer時帶上-v參數,這樣PHP_CodeSniffer在處理過程中會輸出當前正在處理的文件的名稱,所包含的行數和標識符的個數。
$ phpcs /path/to/code/CodeSniffer -v
設置PHP_CodeSniffer的相關配置選項    PHP_CodeSniffere有提供一些配置選項,某些編碼標准只有在設置了配置選項後才能使用。要設置一個HP_CodeSniffer配置選項,可以使用:
$ phpcs config-set <option> <value>
    你可以使用下列命令刪除任意的配置選項,使它恢複到初始值。
$ phpcs config-delete <option>     使用下列查看配置選項的當前設置$ phpcs config-show
    下列是PHP_CodeSniffer的配置選項列表及其設置方法:
default_standard  默認的編碼標准report_format     默認的錯誤報告格式show_warnings     是否默認顯示錯誤報告中的警告(WARNING)信息tab_width         默認的tab寬度相當於幾個空格zend_ca_path      Zend編碼標准所使用的配置選項,指向Zend Code Analyzer(Zend編碼分析器)所在的路徑    默認情況下,如果命令行沒有指定編碼標准,PHP_CodeSniffere會使用PEAR作為編碼標准。你可以通過下列命令來修改默認的編碼標准。
$ phpcs config-set default_standard Zend
    默認情況下,即如果命令行沒有提供報表輸出格式的參數,PHP_CodeSniffere會使用完全錯誤報表格式輸出檢查結果。你可以通過下列命令來修改檢查結果的默認輸出格式。
$ phpcs config-set report_format summary
    默認情況下,PHP_CodeSniffere輸出結果會輸出錯誤和警告信息,你可以在執行phpcs帶上-n去掉警告信息,也可以通過設定show_warnings來決定默認是要顯示還是不顯示。
$ phpcs config-set show_warnings 0
    默認情況下,PHP_CodeSniffere不會將檢查過的文件中的tab替換成空格。在命令行指定一個tab寬度可以使用PHP_CodeSniffere在檢查時替換掉被檢查文件中的tab。你可以設定config-set使PHP_CodeSniffere默認替換tab成空格。
$ phpcs config-set tab_width 4
注:在PHP_CodeSniffere已經被設定成默認替換tab成空格時,在命令行指定tab_width為0會讓PHP_CodeSniffere停止替換tab。
    Zend編碼標准包含一個使用Zend Code Analyzer(Zend編碼分析器)的sniff,使用
zend_ca_path配置選項告訴Zend Code Analyzer的路徑。
$ phpcs config-set zend_ca_path /path/to/ZendCodeAnalyzer
指定PHP_CodeSniffer所需檢查的文件類型(擴展名)    默認情況下,PHP_CodeSniffer會檢查.inc和.php文件。也就是說,如果你指定了一個目錄讓PHP_CodeSniffer檢查,那麼只有以inc和php為擴展名的文件才會被檢查。你可以在命令行通過extensions參數來設置哪一類擴展名的文件需要PHP_CodeSniffer檢查。
$ phpcs extensions=php /path/to/code         只檢查該目錄中以php為擴展名的文件
$ phpcs extensions=php,inc,lib /path/to/code 檢查該目錄中所有以php,inc,lib為擴展名的文件
    注:此參數對在命令行直接指定文件(而不是文件目錄)的情況不適用,因為這種情況下PHP_CodeSniffer將會忽略掉所有文件的擴展名。
$ phpcs extensions=inc sgl_06x/www/index.php sgl_06x/www/rpc/server.php 雖然指定了inc,仍然會檢查php文件
    忽略掉文件的擴展名是PHP_CodeSniffer的一個特性,也是唯一的一種檢查沒有擴展名文件的方法。如果給phpcs的是一個文件目錄作為參數,那麼這個目錄中的所以沒有擴展名的文件將不會被檢查,如果要檢查,只能一個一個檢查。
讓PHP_CodeSniffer在檢查大量文件時忽略掉其中的某些特殊的文件    在PHP_CodeSniffer對大量文件進行檢查時,我們可能不想PHP_CodeSniffer檢查其中的某些特殊的文件。你可以使用ignore參數指定文件名的匹配模式,所有文件名與模式匹配的文件都會被忽略掉而不檢查。  
$ phpcs ignore=*/tests/*,*/data/* /path/to/code
PHP_CodeSniffer所使用的編碼標准(待續)

熱門文章