PHP CodeSniffer進階使用-新增CodeIgniter格式
安裝好PHP_CodeSniffer,內建有五種coding standards。如果您使用其中一種,就可以馬上使用了。
安裝方式很簡單,將CodeIgniter-for-PHP_CodeSniffer解壓縮到PHP_CodeSniffer存放coding standards的目錄下即可。 完成上述步驟,基本上PHP_CodeSniffer就可以使用CodeIgniter的風格作為檢查的依據。
不幸的,CodeIgniter-for-PHP_CodeSniffer直到目前(2011/09)的版本是以CodeIgniter 1.7.x 的風格為依據,所以會有一些誤判…
以Constructor的寫法所遇到的問題舉例,CodeIgniter 2.x 開始不再支援PHP 4。Constructor的寫法必須依照PHP 5的作法。因此,當我們拿CodeIgniter 2.x 開發的php程式檢查,CodeIgniter-for-PHP_CodeSniffer會顯示如下的錯誤,不允許我們使用PHP5的模式。
我們需要額外做些調整。處理方式也很簡單,不需要調整CodeIgniter-for-PHP_CodeSniffer的程式。在官方文件-Annotated ruleset.xml,提到一些作法。我們只需要調整ruleset.xml 設定即可。
檢查時,也需要指明要使用調整後的ruleset.xml。之前的錯誤訊息就不會再顯示了。
以下,則是另外兩個範例。分別是編排程式碼時允許使用tab,以及{}的使用風格
後記
在實際使用CodeIgniter-for-PHP_CodeSniffer後,發現PHP_CodeSniffer常會因segmentation fault的錯誤而結束執行。原以為是因為被檢查的程式碼行數太多。但,有時檢查不到200行的程式也會有此狀況。最後才知道,很多人使用上都有此問題。該問題也已經列在CodeIgniter-for-PHP_CodeSniffer的 issues了
- MySource
- PEAR
- PHPCS
- Squiz
- Zend
安裝方式很簡單,將CodeIgniter-for-PHP_CodeSniffer解壓縮到PHP_CodeSniffer存放coding standards的目錄下即可。 完成上述步驟,基本上PHP_CodeSniffer就可以使用CodeIgniter的風格作為檢查的依據。
不幸的,CodeIgniter-for-PHP_CodeSniffer直到目前(2011/09)的版本是以CodeIgniter 1.7.x 的風格為依據,所以會有一些誤判…
以Constructor的寫法所遇到的問題舉例,CodeIgniter 2.x 開始不再支援PHP 4。Constructor的寫法必須依照PHP 5的作法。因此,當我們拿CodeIgniter 2.x 開發的php程式檢查,CodeIgniter-for-PHP_CodeSniffer會顯示如下的錯誤,不允許我們使用PHP5的模式。
- 12 | ERROR | PHP5 style constructors are not allowed; use "Xyz" instead
- 15 | ERROR | PHP5 style calls to parent constructors are not allowed. Please use "parent::CI_Controller" instead.
- <rule ref="CodeIgniter.NamingConventions.ConstructorName">
- <severity>0</severity>
- </rule>
- phpcs --standard=/CodeSniffer/Standards/CodeIgniter/ruleset.xml /prog/myprog.php
- <rule ref="CodeIgniter.WhiteSpace.DisallowSpaceIndent">
- <severity>0</severity>
- </rule>
- <rule ref="Generic.Functions.OpeningFunctionBraceBsdAllman.BraceOnSameLine">
- <severity>0</severity>
- </rule>
在實際使用CodeIgniter-for-PHP_CodeSniffer後,發現PHP_CodeSniffer常會因segmentation fault的錯誤而結束執行。原以為是因為被檢查的程式碼行數太多。但,有時檢查不到200行的程式也會有此狀況。最後才知道,很多人使用上都有此問題。該問題也已經列在CodeIgniter-for-PHP_CodeSniffer的 issues了
留言