摘要:是個代碼格式化工具,格式化的標準是以及一些的標準。這個工具也和等優秀的庫出自同門。如果同時設定了和,前者的優先級更高。同時使用和命令可以顯示出需要修改的匯總,但是并不實際修改。你可以設置格式化的選項級別文件以及目錄。
php-cs-fixer 是個代碼格式化工具,格式化的標準是 PSR-1、PSR-2 以及一些 symfony 的標準。這個工具也和 symfony、twig 等優秀的 PHP 庫出自同門。
安裝與更新需要使用 PHP 5.3.6 以上的版本。
你可以直接下載封裝好的 phar 包:php-cs-fixer.phar;
或者通過 wget 下載(下面的都是 OSX 和 Linux 上的用法):
wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer
或者通過 curl 下載:
curl http://get.sensiolabs.org/php-cs-fixer.phar -o php-cs-fixer
下載完成后給可執行的權限,然后移動到 bin 目錄下面即可:
sudo chmod a+x php-cs-fixer sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer
這樣就可以在任何地方直接使用 php-cs-fixer 命令來調用了。
也可以用過 Composer 來安裝:
composer global require fabpot/php-cs-fixer
如果你是 Mac 用戶、homebrew 用戶并且已經 tap 過 homebrew/php 的話,也可以直接:
brew install php-cs-fixer
或者:
brew install homebrew/php/php-cs-fixer
如果后續需要更新的話:
php-cs-fixer self-update
如果是通過 homebrew 安裝的:
brew upgrade php-cs-fixer
如果沒有將執行文件放到 bin 目錄下或者在 Windows需要使用 php php-cs-fixer.phar 代替 php-cs-fixer。
用法用法也很簡單,最基本的命令參數就是 fix,直接執行時會盡可能多的根據默認標準格式化代碼:
# 格式化目錄 如果是當前目錄的話可以省略目錄 php-cs-fixer fix /path/to/dir # 格式化文件 php-cs-fixer.phar fix /path/to/file
--verbose 選項用于展示應用了的規則,默認是文本(txt)格式。
--level 選項用于控制需要使用的規則層級:
php-cs-fixer fix /path/to/project --level=psr0 php-cs-fixer fix /path/to/project --level=psr1 php-cs-fixer fix /path/to/project --level=psr2 php-cs-fixer fix /path/to/project --level=symfony
默認情況下執行的是 PSR-2 的所有選項以及一些附加選項(主要是 symfony 相關的)。還有一些屬于『貢獻級別』的選項,你可以通過 --fixers 選擇性的添加,--fixers 的多個條件要用逗號分開:
php-cs-fixer fix /path/to/dir --fixers=linefeed,short_tag,indentation
如果有需要的話也可以使用 -name_of_fixer 采取黑名單的方式設定禁用哪些選項。如果同時設定了 --fixers 和 -name_of_fixer,前者的優先級更高。
同時使用 --dry-run 和 --diff 命令可以顯示出需要修改的匯總,但是并不實際修改。
通過以下方式也可以查看有哪些內容是會修改的,但是并不實際改動文件:
cat foo.php | php-cs-fixer fix --diff -自定義配置
--config 選項可以用來設置選取目錄以及文件進行分析并格式化,但是這個選項只能設置一些常見的已知的項目,比如 symfony:
# For the Symfony 2.3+ branch php-cs-fixer fix /path/to/sf23 --config=sf23
已有選項:
default 默認配置
magento magento 項目
sf23 symfony 的項目
更多時候,我們可以通過配置文件來自定義格式化選項以及搜索的目錄和文件。自定義配置通過在項目根目錄添加一個 .php_cs 文件的方式實現。
設置本身就是 PHP 代碼,最后返回一個 SymfonyCSConfigInterface 的實例即可。你可以設置格式化的選項、級別、文件以及目錄。
下面是一個簡單的例子:
exclude("somedir") // 忽略 somedir ->in(__DIR__) // 當前目錄 ; return SymfonyCSConfigConfig::create() ->fixers(["strict_param", "short_array_syntax"]) // 添加兩個選項 ->finder($finder) ;
如果你想完全自定義格式化選項,就需要將格式化級別清空,并指定好所有需要的選項:
in(__DIR__) ; return SymfonyCSConfigConfig::create() ->level(SymfonyCSFixerInterface::NONE_LEVEL) ->fixers(["trailing_spaces", "encoding"]) ->finder($finder) ;
你也可以通過在選項前面添加 - 的方式來禁用某些選項,比如下面這個例子不采用 PSR-0:
exclude("somedir") ->in(__DIR__) ; return SymfonyCSConfigConfig::create() ->fixers(["-psr0"]) ->finder($finder) ;
默認條件下的格式化級別是 symfony (最嚴格),你可以修改這個級別:
level(SymfonyCSFixerInterface::PSR2_LEVEL) ;
通過這些設置選項的組合,可以很輕易的定制出自己想要的效果。
你也可以通過 --config-file 選項指定 .php_cs 文件的位置。
啟用緩存可以在后續的執行中加快速度,通過以下方法設置:
setUsingCache(true) ;編輯器插件
下面這些編輯器/IDE 的插件可以幫你簡化格式化的工作:
Atom
NetBeans
PhpStorm
Sublime Text
Vim
格式化選項psr0 [PSR-0]
PSR-0 的路徑和命名空間標準
encoding [PSR-1]
文件必須是不帶 BOM 的 UTF-8 編碼;
short_tag [PSR-1]
只能使用 和 = ?> 兩種 PHP 代碼標簽;
braces [PSR-2]
所有語句塊都必須包含在花括號內,且位置以及縮進是符合標準的;
class_definition [PSR-2]
class、trait、interfaces 關鍵字和名稱之間只能有一個空格;
elseif [PSR-2]
使用 elseif 替代 else if;
eof_ending [PSR-2]
文件必須以空白行結尾;
function_call_space [PSR-2]
調用函數和方法時,函數名和方法名與參數擴展之間不能有空格;
function_declaration [PSR-2]
函數聲明時空格的使用需要符合 PSR-2;
indentation [PSR-2]
代碼必須使用四個空格縮進而不是制表符;
line_after_namespace [PSR-2]
命名空間的聲明后必須有一個空白行;
linefeed [PSR-2]
所有 PHP 文件都只能使用 LF(Unix) 結尾;
lowercase_constants [PSR-2]
PHP 常量 true、false 和 null 必須使用小寫;
lowercase_keywords [PSR-2]
PHP 關鍵字必須都是小寫;
method_argument_space [PSR-2]
方法聲明及調用時,參數之間的逗號前不能有空格,逗號后必須有一個空格;
multiple_use [PSR-2]
每個 use 只能聲明一個元素;
parenthesis [PSR-2]
圓括號內兩側不能有空格;
php_closing_tag [PSR-2]
純 PHP 文件必須省略 ?> 標簽;
single_line_after_imports [PSR-2]
每個 use 聲明獨立一行,且 use 語句塊之后要有一個空白行;
trailing_spaces [PSR-2]
刪除非空行之后多余的空格;
visibility [PSR-2]
每個屬性和方法都必須指定作用域是 public、protected 還是 private,abstract 和 final 必須位于作用域關鍵字之前,static 必須位于作用域之后;
array_element_no_space_before_comma [symfony]
數組聲明中,逗號之前不能有空格;
array_element_white_space_after_comma [symfony]
數組聲明中,逗號之后必須有一個人空格;
blankline_after_open_tag [symfony]
PHP 開始標簽的同一行不能有代碼,且下面必須有一個空白行;
concat_without_spaces [symfony]
點連接符左右兩邊不能有多余的空格;
double_arrow_multiline_whitespaces [symfony]
=> 操作符兩端不能有多個空白行;
duplicate_semicolon [symfony]
刪除重復的分號;
empty_return [symfony]
return 語句如果沒有任何返回的話直接寫 return 即可(不用 return null);
extra_empty_lines [symfony]
刪除多余的空白行;
function_typehint_space [symfony]
修正函數參數和類型提示之間的缺失的空格問題;
include [symfony]
include 和文件路徑之間需要有一個空格,文件路徑不需要用括號括起來;
join_function [symfony]
使用 join 替換 implode 函數;
list_commas [symfony]
刪除 list 語句中多余的逗號;
method_argument_default_value [symfony]
函數參數中有默認值的參數不能位于無默認值的參數之前;
multiline_array_trailing_comma [symfony]
多行數組最后一個元素應該也有一個逗號;
namespace_no_leading_whitespace [symfony]
命名空間前面不應該有空格;
new_with_braces [symfony]
使用 new 新建實例時后面都應該帶上括號;
no_blank_lines_after_class_opening [symfony]
類開始標簽后不應該有空白行;
no_empty_lines_after_phpdocs [symfony]
PHP 文檔塊開始開始元素下面不應該有空白行;
object_operator [symfony]
T_OBJECT_OPERATOR (->) 兩端不應有空格;
operators_spaces [symfony]
二進制操作符兩端至少有一個空格;
phpdoc_indent [symfony]
phpdoc 應該保持縮進;
phpdoc_inline_tag [symfony]
修正 phpdoc 內聯標簽格式,使標簽與后續內容始終位于一行;
phpdoc_no_access [symfony]
@access 不應該出現在 phpdoc 中;
phpdoc_no_empty_return [symfony]
@return void 和 @return null 不應該出現在 phpdoc 中;
phpdoc_no_package [symfony]
@package 和 @subpackage 不應該出現在 phpdoc 中;
phpdoc_params [symfony]
@param, @throws, @return, @var, 和 @type 等 phpdoc 標簽都要垂直對齊;
phpdoc_scalar [symfony]
phpdoc 標量類型聲明時應該使用 int 而不是 integer,bool 而不是 boolean,float 而不是 real 或者 double;
phpdoc_separation [symfony]
phpdoc 中注釋相同的屬性應該放在一起,不同的屬性之間應該有一個空白行分割;
phpdoc_short_description [symfony]
phpdoc 的簡要描述應該以 .、! 或 ? 結尾;
phpdoc_to_comment [symfony]
文檔塊應該都是結構化的元素;
phpdoc_trim [symfony]
除了文檔塊最開始的部分和最后的部分,phpdoc 開始和結束都應該是有內容的;
phpdoc_type_to_var [symfony]
@type 需要使用 @var 代替;
phpdoc_types [symfony]
phpdoc 中應該正確使用大小寫;
phpdoc_var_without_name [symfony]
@var 和 @type 注釋中不應該包含變量名;
pre_increment [symfony]
不應該使用 ++i 或 --i 的用法;
print_to_echo [symfony]
如果可能的話,使用 echo 代替 print 語句;
remove_leading_slash_use [symfony]
刪除 use 前的空行;
remove_lines_between_uses [symfony]
刪除 use 語句塊中的空行;
return [symfony]
return 之前應該有一個空行;
self_accessor [symfony]
在當前類中使用 self 代替類名;
short_bool_cast [symfony]
bool 類型數據前不應該試用兩個感嘆號;
single_array_no_trailing_comma [symfony]
PHP 單行數組最后一個元素后面不應該有空格;
single_blank_line_before_namespace [symfony]
命名空間聲明前應該有一個空白行;
single_quote [symfony]
簡單字符串應該使用單引號代替雙引號;
spaces_after_semicolon [symfony]
修復分號后面的空格;
spaces_before_semicolon [symfony]
禁止只有單行空格和分號的寫法;
spaces_cast [symfony]
變量和修飾符之間應該有一個空格;
standardize_not_equal [symfony]
使用 <> 代替 !=;
ternary_spaces [symfony]
三元運算符之間的空格標準化;
trim_array_spaces [symfony]
數組需要格式化成和函數/方法參數類似,上下沒有空白行;
unalign_double_arrow [symfony]
不對其 =>;
unalign_equals [symfony]
不對其等號;
unary_operators_spaces [symfony]
一元運算符和運算數需要相鄰;
unneeded_control_parentheses [symfony]
刪除控制結構語句中多余的括號;
unused_use [symfony]
刪除沒有用到的 use 語句;
whitespacy_lines [symfony]
刪除空白行中多余的空格;
除了以上這些選項以外,還有一些用戶貢獻的選項,這里就不再一一介紹了。
對于代碼風格是否統一,執行什么樣的標準,每個人、每個團隊可能都有自己的看法。這里只是介紹一下這個工具,至于如何選用,還在于大家自己。如果是開源項目,你也可以試用一下 StyleCI。
私博地址:http://0x1.im
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21288.html
PHP 函數的 JavaScript 實現 module.exports = function array_sum (array) { // eslint-disable-line camelcase // discuss at: http://locutus.io/php/array_sum/ // original by: Kevin van Zonneveld (http://kv...
摘要:它包含兩類腳本,和地址腳本對文件定義了一系列的代碼規范通常使用官方的代碼規范標準,比如的,能夠檢測出不符合代碼規范的代碼并發出警告或報錯可設置報錯等級。腳本能自動修正代碼格式上不符合規范的部分。 Last-Modified: 2019年5月10日13:59:27 參考鏈接 PHP開發規范之使用phpcbf腳本自動修正代碼格式 在PhpStorm中使用PSR2編碼規范phpcbf腳本自...
摘要:標準規范簡介是的簡寫,由組織制定的規范,是開發的實踐標準。具體標準有有了統一編碼風格規范,更有利于查看和學習各個框架或類庫,不不需要每次都適應新的編碼風格。同時在開發團隊內部使用統一的編碼規范更有利于代碼審查版本控制團隊內部交流。 PHP 標準規范 PSR PSR 簡介 PSR 是 PHP Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP...
摘要:啟用配置項可預覽編碼是否合格的情況,現在你就搭上這款插件開始調試吧主題推薦我這里依然熱衷于其獨特的風格以及畫面感十足一直霸占在主題排行榜的前列。進入對應的配置項可修改其。 showImg(https://segmentfault.com/img/remote/1460000009555145); 說明 走一波配置流,莫等閑,高效快速開發,從自己的常用的工具開始 尋找舒適的工作方式,僅...
摘要:首先你應該是在用以上的版本,如果版本在這之下,是時候該升級了。按照其官網的說法,這個組織的目的并不是告訴你你應該怎么做,只是一些主流的框架之間相互協商和約定。和沒有出現在以上的列表中,是因為還沒有投票通過。不要被這些話所困擾。 首先你應該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時候該升級了。我建議如果有條件,最好使用最新的版本。 你應該看過 PHP The R...
閱讀 1978·2019-08-30 15:54
閱讀 3602·2019-08-29 13:07
閱讀 3129·2019-08-29 12:39
閱讀 1793·2019-08-26 12:13
閱讀 1552·2019-08-23 18:31
閱讀 2164·2019-08-23 18:05
閱讀 1852·2019-08-23 18:00
閱讀 1048·2019-08-23 17:15