php-cs-fixer ist ein Codeformatierungstool. Die Formatierungsstandards sind PSR-1, PSR-2 und einige Symfony-Standards. Dieses Tool stammt ebenfalls aus derselben Familie wie Symfony, Twig und andere hervorragende PHP-Bibliotheken.
Installation und Update
Erfordert PHP 5.3.6 oder höher.
Sie können das gepackte Phar-Paket direkt herunterladen: php-cs-fixer.phar;
oder über wget herunterladen (im Folgenden finden Sie die Verwendung unter OSX und Linux):
wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer
oder über Curl herunterladen:
curl http://get.sensiolabs.org/php-cs-fixer.phar -o php-cs-fixer
Nachdem der Download abgeschlossen ist, erteilen Sie der Datei Ausführungsberechtigungen und verschieben Sie sie dann in das bin-Verzeichnis:
sudo chmod a+x php-cs-fixer sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer
Auf diese Weise können Sie den Befehl php-cs-fixer
direkt verwenden, um ihn überall aufzurufen. 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 的实例即可。你可以设置格式化的选项、级别、文件以及目录。
下面是一个简单的例子:
<?php $finder = Symfony\CS\Finder\DefaultFinder::create() ->exclude('somedir') // 忽略 somedir ->in(__DIR__) // 当前目录 ; return Symfony\CS\Config\Config::create() ->fixers(['strict_param', 'short_array_syntax']) // 添加两个选项 ->finder($finder) ;
如果你想完全自定义格式化选项,就需要将格式化级别清空,并指定好所有需要的选项:
<?php $finder = Symfony\CS\Finder\DefaultFinder::create() ->in(__DIR__) ; return Symfony\CS\Config\Config::create() ->level(Symfony\CS\FixerInterface::NONE_LEVEL) ->fixers(['trailing_spaces', 'encoding']) ->finder($finder) ;
你也可以通过在选项前面添加 -
的方式来禁用某些选项,比如下面这个例子不采用 PSR-0:
<?php $finder = Symfony\CS\Finder\DefaultFinder::create() ->exclude('somedir') ->in(__DIR__) ; return Symfony\CS\Config\Config::create() ->fixers(['-psr0']) ->finder($finder) ;
默认条件下的格式化级别是 symfony (最严格),你可以修改这个级别:
<?php return Symfony\CS\Config\Config::create() ->level(Symfony\CS\FixerInterface::PSR2_LEVEL) ;
通过这些设置选项的组合,可以很轻易的定制出自己想要的效果。
你也可以通过 --config-file
选项指定 .php_cs
文件的位置。
启用缓存可以在后续的执行中加快速度,通过以下方法设置:
<?php return Symfony\CS\Config\Config::create() ->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 ?>
和<?= ?>
两种 PHP 代码标签;braces [PSR-2]
所有语句块都必须包含在花括号内,且位置以及缩进是符合标准的;class_definition [PSR-2]
class、trait、interfaces 关键字和名称之间只能有一个空格;-
elseif [PSR-2]
Wenn Sie ein Mac-Benutzer oder Homebrew-Benutzer sind und Homebrew/PHP aufgezeichnet haben, können Sie auch direkt:
使用elseif
替代else if
Sie können Composer auch verwenden, um Folgendes zu installieren:
rrreee rrreee - oder:
rrreeeWenn Sie später aktualisieren müssen: rrreee
🎜Verwendung🎜🎜Die Verwendung ist auch sehr einfach. Der grundlegendste Befehlsparameter ist
Bei Installation über Homebrew:
rrreee
Wenn die ausführbare Datei nicht im bin-Verzeichnis oder in Windows abgelegt ist, müssen Siephp php-cs-fixer.phar
anstelle vonphp verwenden -cs-fixer
.fix
. Bei direkter Ausführung wird so viel Code wie möglich gemäß dem Standardstandard formatiert: 🎜rrreee🎜--verbose wird verwendet, um die angewendeten Regeln anzuzeigen. Der Standardwert ist das Textformat (<code>txt
). Die Option 🎜🎜--level
wird verwendet, um die Ebene der zu verwendenden Regeln zu steuern: 🎜rrreee🎜Standardmäßig werden alle Optionen von PSR-2 und einige zusätzliche Optionen (hauptsächlich Symfony-bezogen) ausgeführt. Es gibt auch einige Optionen, die zur „Beitragsebene“ gehören. Sie können sie selektiv über--fixers
hinzufügen. Mehrere Bedingungen von--fixers
sollten durch Kommas getrennt werden: 🎜rrreee 🎜Bei Bedarf können Sie auch mit-name_of_fixer
festlegen, welche Optionen mithilfe einer Blacklist deaktiviert werden sollen. Wenn sowohl--fixers
als auch-name_of_fixer
festgelegt sind, hat ersteres eine höhere Priorität. 🎜🎜Durch die gleichzeitige Verwendung der Befehle--dry-run
und--diff
kann die Zusammenfassung angezeigt werden, die geändert werden muss, sie wird jedoch nicht tatsächlich geändert. 🎜🎜Sie können auch mit der folgenden Methode überprüfen, welcher Inhalt geändert wird, die Datei wird jedoch nicht tatsächlich geändert: 🎜rrreee🎜Benutzerdefinierte Konfiguration🎜🎜Die Option--config
kann verwendet werden, um die Auswahl festzulegen Verzeichnis und Dateien Analysieren und formatieren, aber diese Option kann nur einige gängige bekannte Projekte festlegen, z. B. Symfony:🎜rrreee🎜Vorhandene Optionen:🎜- 🎜🎜Standardkonfiguration🎜🎜🎜🎜Magento Magento-Projekt🎜🎜🎜🎜 SF23 Symfony Projekt🎜🎜
.php_cs
-Datei im Projektstammverzeichnis erreicht. 🎜🎜Die Einstellung selbst ist PHP-Code und gibt schließlich eine Instanz von SymfonyCSConfigInterface zurück. Sie können Formatierungsoptionen, Ebenen, Dateien und Verzeichnisse festlegen. 🎜🎜Hier ist ein einfaches Beispiel: 🎜rrreee🎜Wenn Sie die Formatierungsoptionen vollständig anpassen möchten, müssen Sie die Formatierungsebene löschen und alle erforderlichen Optionen angeben: 🎜rrreee🎜Sie können auch -, um bestimmte Optionen zu deaktivieren. Im folgenden Beispiel wird beispielsweise PSR-0 nicht verwendet: 🎜rrreee🎜Die Standardformatierungsebene ist Symfony (die strengste), Sie können diese Ebene ändern: 🎜rrreee 🎜Durch die Durch die Kombination dieser Einstellungsmöglichkeiten können Sie den gewünschten Effekt ganz einfach individuell anpassen. 🎜🎜Sie können den Speicherort der Datei.php_cs
auch über die Option--config-file
angeben. 🎜🎜Das Aktivieren des Cachings kann nachfolgende Ausführungen beschleunigen. Stellen Sie es mit den folgenden Methoden ein: 🎜rrreee🎜Editor-Plug-in🎜🎜Die folgenden Editor-/IDE-Plug-ins können Ihnen dabei helfen, die Formatierungsarbeit zu vereinfachen: 🎜- 🎜🎜Atom 🎜🎜 🎜🎜NetBeans🎜🎜🎜🎜PhpStorm🎜🎜🎜🎜Sublime Text🎜🎜🎜🎜Vim🎜🎜
- 🎜🎜🎜psr0 [PSR-0]🎜 🎜 PSR-0 Pfad- und Namespace-Standards ?? ?php ?> und
<?= ?>
sind zwei PHP-Code-Tags. 🎜🎜🎜🎜🎜🎜🎜geschweifte Klammern [PSR-2]🎜🎜 Alle Anweisungsblöcke müssen sein In geschweiften Klammern eingeschlossen, und die Position und Einrückung sind Standard; 🎜elseif [PSR-2]🎜🎜 Verwenden Sieelseif
anstelle vonelse if
; 🎜🎜🎜🎜🎜🎜🎜eof_ending [PSR-2]🎜🎜 Die Datei muss mit enden eine Leerzeile;🎜🎜🎜 function_call_space [PSR-2]
Beim Aufrufen von Funktionen und Methoden dürfen zwischen Funktionsnamen und Methodennamen sowie der Parametererweiterung keine Leerzeichen stehen Deklaration Die Verwendung muss PSR-2 entsprechen;Einrückung [PSR-2]
Code muss mit vier Leerzeichen anstelle von Tabulatoren eingerückt werden;line_after_namespace [PSR-2]
Nach der Namespace-Deklaration muss eine Leerzeile stehen;linefeed [PSR-2]
Alle PHP-Dateien können nur die Endung LF (Unix) verwenden;- lowercase_constants [PSR -2]
PHP-Konstanten true, false und null müssen in Kleinbuchstaben geschrieben werden;
- lowercase_keywords [PSR-2]
PHP-Schlüsselwörter müssen in Kleinbuchstaben geschrieben werden; PSR - 2]
Wenn die Methode deklariert und aufgerufen wird, darf zwischen den Parametern kein Leerzeichen stehen und nach dem Komma muss ein Leerzeichen stehen Jede Verwendung kann nur ein Element deklarieren. Klammer [PSR-2]
Auf beiden Seiten der Klammer dürfen keine Leerzeichen stehen Bei reinen PHP-Dateien muss das Tag? > ;
weggelassen werden der use-Anweisungsblock;trailing_spaces [PSR -2]
Zusätzliche Leerzeichen nach nicht leeren Zeilen löschen;-
visibility [PSR-2]
Array_element_white_space_after_comma [symf ony]
Jede Eigenschaft und Methode muss angegeben werden dass der Bereichpublic
, protected oderprivate
ist,abstract
undfinal
sein müssen vor dem Schlüsselwort „scope“ muss sichstatic
nach dem Bereich befinden; - In der Array -Deklaration muss es nach dem Kommaspersönlichkeitsbereich einen geben; Tag, und darunter muss eine Leerzeile stehen;
concat_without_spaces [symfony] - Punktverbindung Es dürfen keine zusätzlichen Leerzeichen auf der linken und rechten Seite sein;
?>
标签; 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
(->
double_arrow_multiline_whitespaces [symfony]=>
An beiden Enden des Operators dürfen nicht mehrere Leerzeilen stehen. 🎜🎜🎜🎜🎜🎜🎜due_semicolon [symfony]🎜🎜 Doppelte Semikolons löschen; Symfony] 🎜🎜 Wenn die Rückgabeerklärung nichts zurückgibt, schreiben Sie einfach die Rückgabe (ohne Rückkehr); symfony]🎜🎜 Beheben Sie das Problem mit fehlenden Leerzeichen zwischen Funktionsparametern und Typhinweisen Der Dateipfad muss nicht in Klammern gesetzt werden. 🎜🎜🎜🎜🎜🎜🎜join_function [symfony]🎜🎜 Verwenden Siejoin
🎜🎜🎜list_commas [symfony]🎜🎜 Löschen Sie die zusätzlichen Kommas in derlist
-Anweisung; 🎜🎜🎜🎜🎜🎜🎜method_argument_default_value [symfony] 🎜🎜 Parameter mit Standardwerten in Funktionsparametern können nicht platziert werden vor Parametern ohne Standardwerte; 🎜🎜🎜🎜🎜🎜🎜multiline_array_trailing_comma [symfony]🎜🎜 Das letzte Element des mehrzeiligen Arrays sollte ebenfalls ein Komma haben; 🎜🎜🎜🎜🎜🎜 🎜 namespace_no_leading_whitespace [symfony] 🎜🎜 Es sollten keine Leerzeichen vorhanden sein vor dem Namespace; 🎜🎜🎜🎜🎜🎜🎜new_with_braces [symfony]🎜🎜 Wenn new zum Erstellen einer neuen Instanz verwendet wird, sollten danach Klammern stehen; 🎜🎜🎜🎜🎜🎜 🎜no_blank_lines_after_class_opening [symfon y] 🎜🎜 Das sollte es geben Es dürfen keine Leerzeilen nach dem Klasseneröffnungs-Tag vorhanden sein. 🎜🎜🎜🎜🎜🎜🎜no_empty_lines_after_phpdocs [symfony] 🎜 🎜T_OBJECT_OPERATOR
(->
) An beiden Enden dürfen keine Leerzeichen stehen 🎜🎜🎜 operators_spaces [symfony]
Binäre Operatoren haben mindestens ein Leerzeichen an beiden Enden.phpdoc_indent [symfony]
phpdoc sollte eingerückt bleiben phpdoc_inline_tag [symfony] Korrigieren Sie das phpdoc-Inline-Tag-Format, sodass das Tag und der nachfolgende Inhalt immer in einer Zeile stehen.
phpdoc_no_access [symfony]@access
sollte nicht in phpdoc erscheinen;@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]
不对其=>
phpdoc_no_empty_return [symfony]-
🎜
phpdoc_no_package [symfony]@package
und@subpackage
sollten nicht in PHPdoc erscheinen; 🎜🎜🎜🎜🎜🎜🎜phpdoc_params [symfony]🎜🎜@param
, phpdoc-Tags wie@throws
,@return
,@var
und@type
müssen vertikal ausgerichtet sein 🎜 🎜 🎜🎜🎜🎜🎜phpdoc_scalar [symfony]🎜🎜 Die Skalartypdeklaration von phpdoc sollteint
anstelle voninteger
undbool
anstelle vonverwenden boolean
,float
stattreal
oderdouble
; Die gleichen Attribute sollten zusammengefügt werden, und unterschiedliche Attribute sollten durch eine Leerzeile getrennt werden;!
oder?
end; 🎜🎜🎜🎜🎜🎜🎜phpdoc_to_comment [symfony]🎜🎜 Dokumentblöcke sollten alle strukturierte Elemente sein; ]🎜🎜 Mit Ausnahme des ersten und letzten Teils des Dokumentblocks sollte phpdoc am Anfang und am Ende Inhalt haben; stattdessen@var
verwendet; 🎜🎜🎜🎜🎜🎜🎜phpdoc_types [symfony]🎜🎜 Groß- und Kleinschreibung sollten in phpdoc korrekt verwendet werden; 🎜🎜🎜🎜🎜🎜🎜phpdoc_var_without_name [symfony]🎜 🎜@ var und@type
Kommentare sollten keine Variablennamen enthalten; > oder--i; Anweisung; 🎜🎜🎜🎜🎜🎜remove_leading_slash_use [symfony]🎜🎜 Löschen Sie die Leerzeile vor use
; 🎜🎜🎜🎜🎜🎜🎜remove_lines_between_uses [symfony]🎜 🎜Verwendung
löschen > block Es sollte eine leere Zeile vor 🎜🎜🎜🎜🎜🎜🎜return [symfony]🎜🎜return
stehen. Verwenden Sieself
anstelle des Klassennamens; 🎜🎜🎜🎜🎜🎜 🎜short_bool_cast [symfony]🎜🎜bool
-Daten sollten nicht durch zwei Ausrufezeichen vorangestellt werden; einzeiliges Array; 🎜🎜🎜🎜🎜🎜🎜single_blank_line_before_namespace [symfony]🎜🎜 Vor der Namespace-Deklaration sollte eine Leerzeile stehen; 🎜 🎜🎜🎜🎜🎜🎜single_quote [symfony]🎜 🎜 Einfache Zeichenfolgen sollten stattdessen einfache Anführungszeichen verwenden doppelte Anführungszeichen; 🎜🎜🎜🎜🎜🎜🎜spaces_after_semicolon [symfony]🎜🎜 Leerzeichen nach Semikolons korrigieren; 🎜🎜🎜🎜🎜🎜🎜spaces_before_s emicolon [symfony]🎜🎜 verboten Nur einfach -zeilige Leerzeichen und Semikolons; 🎜spaces_cast [symfony]🎜🎜 Zwischen Variablen und Modifikatoren sollte ein Leerzeichen stehen. 🎜🎜🎜🎜🎜🎜🎜standardize_not_equal [symfony]🎜🎜 Verwenden Sie<>
anstelle von!=; 🎜🎜🎜🎜🎜🎜🎜ternary_spaces [symfony]🎜🎜 Leerzeichen zwischen ternären Operatoren normalisieren; 🎜🎜🎜🎜🎜🎜🎜trim_array_spaces [symfony]🎜🎜 Arrays müssen ähnlich wie die Funktion formatiert werden /Methodenparameter, mit Nr Leerzeilen oben und unten; 🎜🎜🎜🎜🎜🎜🎜unalign_double_arrow [symfony]🎜🎜 Verwenden Sie nicht
=>
; 🎜🎜🎜 🎜🎜🎜🎜unalign_equals [symfony]🎜🎜 nicht gleich dem Zeichen;🎜🎜🎜 unary_operators_spaces [symfony]
Unäre Operatoren und Operanden müssen benachbart sein;unneeded_control_parentheses [symfony]
Überflüssige Klammern in Kontrollstrukturanweisungen entfernen;
unused_use [symfony ] Nicht verwendete Nutzungsanweisungen löschen;
whitespacy_lines [symfony] Zusätzliche Leerzeichen in Leerzeilen löschen;
@return void
und @return null
sollten nicht in phpdoc erscheinen; PHP-Video-Tutorial“