php-cs-fixer est un outil de formatage de code les normes de formatage sont PSR-1, PSR-2 et certaines normes symfony. Cet outil vient également de la même famille que symfony, twig et d’autres excellentes bibliothèques PHP.
Installation et mise à jour
Nécessite PHP 5.3.6 ou supérieur.
Vous pouvez télécharger le package phar directement : php-cs-fixer.phar ;
ou le télécharger via wget (voici l'utilisation sur OSX et Linux) :
wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer
ou le télécharger via curl :
curl http://get.sensiolabs.org/php-cs-fixer.phar -o php-cs-fixer
Une fois le téléchargement terminé, accordez les autorisations à l'exécutable, puis déplacez-le vers le répertoire bin :
sudo chmod a+x php-cs-fixer sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer
De cette façon, vous pouvez directement utiliser la commande php-cs-fixer
pour l'appeler n'importe où. 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]
Si vous êtes un utilisateur Mac, un utilisateur homebrew et que vous avez enregistré homebrew/php, vous pouvez également directement :
使用elseif
替代else if
Vous pouvez également utiliser Composer pour installer :
rrreee rrreee - ou :
rrreeeSi vous devez mettre à jour plus tard : rrreee
🎜Usage🎜🎜L'utilisation est également très simple. Le paramètre de commande le plus basique est
Si installé via homebrew :
rrreee
Si le fichier exécutable n'est pas placé dans le répertoire bin ou dans Windows, vous devez utiliserphp php-cs-fixer.phar
au lieu dephp -cs-fixateur
.fix
Lorsqu'il est exécuté directement, autant de code que possible sera formaté selon la norme par défaut : 🎜rrreee🎜. --verbose est utilisée pour afficher les règles appliquées. La valeur par défaut est le format texte (<code>txt
). L'option 🎜🎜--level
est utilisée pour contrôler le niveau de règles à utiliser : 🎜rrreee🎜Par défaut, toutes les options de PSR-2 et certaines options supplémentaires (principalement liées à Symfony) sont exécutées. Il existe également certaines options qui appartiennent au "niveau de contribution". Vous pouvez les ajouter de manière sélective via--fixers
. Plusieurs conditions de--fixers
doivent être séparées par des virgules : 🎜rrreee 🎜Si nécessaire, vous pouvez également utiliser-name_of_fixer
pour définir les options à désactiver à l'aide d'une liste noire. Si--fixers
et-name_of_fixer
sont définis, le premier est prioritaire. 🎜🎜L'utilisation simultanée des commandes--dry-run
et--diff
permet d'afficher le résumé qui doit être modifié, mais ne le modifie pas réellement. 🎜🎜Vous pouvez également vérifier quel contenu sera modifié via la méthode suivante, mais le fichier ne sera pas réellement modifié : 🎜rrreee🎜Configuration personnalisée🎜🎜L'option--config
peut être utilisée pour définir le fichier sélectionné. répertoire et fichiers Analyser et formater, mais cette option ne peut définir que certains projets connus courants, tels que symfony :🎜rrreee🎜Options existantes :🎜- 🎜🎜configuration par défaut par défaut🎜🎜🎜🎜magento magento project🎜🎜🎜🎜 sf23 symfony project🎜🎜
.php_cs
dans le répertoire racine du projet. 🎜🎜Le paramètre lui-même est du code PHP et renvoie enfin une instance de SymfonyCSConfigInterface. Vous pouvez définir des options de formatage, des niveaux, des fichiers et des répertoires. 🎜🎜Voici un exemple simple : 🎜rrreee🎜Si vous souhaitez personnaliser complètement les options de formatage, vous devez effacer le niveau de formatage et spécifier toutes les options requises : 🎜rrreee🎜Vous pouvez également ajouter - pour désactiver certaines options. Par exemple, l'exemple suivant n'utilise pas PSR-0 : 🎜rrreee🎜Le niveau de formatage par défaut est symfony (le plus strict), vous pouvez modifier ce niveau : 🎜rrreee 🎜Grâce au combinaison de ces options de réglage, vous pouvez facilement personnaliser l’effet souhaité. 🎜🎜Vous pouvez également spécifier l'emplacement du fichier.php_cs
via l'option--config-file
. 🎜🎜L'activation de la mise en cache peut accélérer les exécutions ultérieures. Définissez-la via les méthodes suivantes : 🎜rrreee🎜Plug-in d'éditeur🎜🎜Les plug-ins d'éditeur/IDE suivants peuvent vous aider à simplifier le travail de formatage : 🎜- 🎜🎜Atom 🎜🎜 🎜🎜NetBeans🎜🎜🎜🎜PhpStorm🎜🎜🎜🎜Texte sublime🎜🎜🎜🎜Vim🎜🎜
- 🎜🎜🎜psr0 [PSR 0]🎜 🎜 Normes de chemin et d'espace de noms PSR-0 🎜🎜🎜🎜🎜🎜🎜encodage [PSR-1]🎜🎜 Le fichier doit être encodé en UTF-8 sans BOM 🎜🎜🎜🎜🎜🎜🎜short_tag [PSR-1]🎜🎜 ne peut être utilisé que
< ?php ?>
et<?= ?>
sont deux balises de code PHP 🎜🎜🎜🎜🎜🎜🎜accolades [PSR-2]🎜🎜 Tous les blocs d'instructions doivent être entouré d'accolades, et la position et l'indentation sont standard 🎜🎜🎜🎜🎜🎜🎜class_definition [PSR-2]🎜🎜 Il ne peut y avoir qu'entre la classe, le trait, les mots-clés des interfaces et les noms Un espace ; 🎜elseif [PSR-2]🎜🎜 Utilisezelseif
au lieu deelse if
🎜🎜🎜🎜🎜🎜🎜eof_ending [PSR-2 ]🎜🎜 Le fichier doit se terminer par une ligne vide ;🎜🎜🎜 function_call_space [PSR-2]
Lors de l'appel de fonctions et de méthodes, il ne peut pas y avoir d'espaces entre les noms de fonction et les noms de méthodes et l'expansion des paramètresfunction_declaration [PSR-2]
Espaces lors de la fonction ; déclaration L'utilisation doit être conforme à PSR-2 ;
Il doit y avoir une ligne vide après la déclaration de l'espace de noms ; -2] Les constantes PHP true, false et null doivent être en minuscules
lowercase_keywords [PSR-2] Les mots-clés PHP doivent être en minuscules
method_ar gument_space [ RPS - 2] Lorsque la méthode est déclarée et appelée, il ne doit y avoir aucun espace avant la virgule entre les paramètres, et il doit y avoir un espace après la virgule
multiple_use [PSR-2] ; Chaque utilisation ne peut déclarer qu'un seul élément ;
parenthèse [PSR-2] Il ne peut y avoir d'espaces de part et d'autre de la parenthèse
php_closing_tag [PSR-2] ; Les fichiers PHP purs doivent omettre la balise
trailing_spaces [PSR -2] Supprimer les espaces supplémentaires après les lignes non vides
visibility [PSR-2] Chaque propriété et méthode doit spécifier ; que la portée est
array_element_no_space_before_comma [symfony] Il ne peut y avoir d'espace avant la virgule dans la déclaration du tableau ; array_element_white_space_after_comma [symfony]
Dans la déclaration du tableau, il doit y en avoir un après la virgule. Espaces personnels?>
标签;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]
🎜🎜🎜blankline_after_open_tag [symfony]🎜🎜 PHP ne peut pas avoir de code sur la même ligne que la balise d'ouverture ; , et il doit y avoir une ligne vide en dessous 🎜🎜🎜🎜🎜🎜🎜concat_without_spaces [symfony]🎜 🎜 Dot Connector Il ne peut y avoir d'espaces supplémentaires sur les côtés gauche et droit 🎜🎜🎜🎜🎜🎜🎜double_arrow_multiline_whitespaces [symfony] 🎜 🎜T_OBJECT_OPERATOR
(->
=>
Il ne peut pas y avoir plusieurs lignes vides aux deux extrémités de l'opérateur 🎜🎜🎜🎜🎜🎜🎜empty_return [ symfony]🎜🎜 Si l'instruction return ne renvoie rien, écrivez simplement return (sans return null); symfony]🎜🎜 Corrige le problème d'espace manquant entre les paramètres de fonction et les indications de type 🎜🎜🎜🎜🎜🎜🎜include [symfony] 🎜 🎜Il doit y avoir un espace entreinclude
et le chemin du fichier, et le chemin du fichier n'a pas besoin d'être mis entre parenthèses ; 🎜🎜🎜🎜🎜🎜🎜join_function [symfony]🎜🎜 Utilisezjoin
Remplacez la fonctionimplode
; 🎜🎜🎜list_commas [symfony]🎜🎜 Supprimez les virgules supplémentaires dans l'instructionlist
; 🎜🎜🎜🎜🎜🎜🎜method_argument_default_value [symfony] 🎜🎜 Les paramètres avec des valeurs par défaut dans les paramètres de fonction ne peuvent pas être placés avant les paramètres sans valeurs par défaut ; 🎜🎜🎜🎜🎜🎜🎜multiline_array_trailing_comma [symfony]🎜🎜 Le dernier élément du tableau multiligne doit également avoir une virgule 🎜🎜🎜🎜🎜🎜 🎜 namespace_no_leading_whitespace [symfony] 🎜🎜 Il ne devrait y avoir aucun espace devant l'espace de noms ; 🎜🎜🎜🎜🎜🎜🎜new_with_braces [symfony]🎜🎜 Lorsque vous utilisez new pour créer une nouvelle instance, il devrait y avoir des parenthèses après 🎜🎜🎜🎜🎜🎜 🎜no_blank_lines_after_class_opening [symfony] 🎜🎜 Il devrait il ne devrait y avoir aucune ligne vide après la balise d'ouverture de la classe 🎜🎜🎜🎜🎜🎜🎜no_empty_lines_after_phpdocs [symfony]🎜🎜 Il ne devrait y avoir aucune ligne vide sous l'élément d'ouverture du bloc de document PHP 🎜🎜🎜🎜🎜🎜🎜object_oper ator [symfony]🎜 ; 🎜T_OBJECT_OPERATOR
(->
) Il ne doit y avoir aucun espace aux deux extrémités 🎜🎜🎜 operators_spaces [symfony]
Les opérateurs binaires ont au moins un espace aux deux extrémités-
phpdoc_indent [symfony]
phpdoc doit rester en retrait phpdoc_inline_tag [symfony]
Corrigez le format de balise en ligne phpdoc afin que la balise et le contenu ultérieur soient toujours sur une seule lignephpdoc_no_access [symfony]
@access
ne doit pas apparaître dans phpdoc ;@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_params [symfony]🎜🎜@return void
et@return null
ne devraient pas apparaître dans phpdoc ;@package
et@subpackage
ne doivent pas apparaître dans@param
, Les balises phpdoc telles que@throws
,@return
,@var
et@type
doivent être alignées verticalement 🎜 ; 🎜 🎜🎜🎜🎜🎜phpdoc_scalar [symfony]🎜🎜 La déclaration de type scalaire phpdoc doit utiliserint
au lieu deinteger
,bool
au lieu debooléen
,float
au lieu dereal
oudouble
🎜🎜🎜🎜🎜🎜🎜phpdoc_separation [symfony]🎜🎜 commentaires dans phpdoc ; Les mêmes attributs doivent être rassemblés, et les différents attributs doivent être séparés par une ligne vide 🎜🎜🎜🎜🎜🎜🎜phpdoc_short_description [symfony]🎜🎜 La brève description de phpdoc doit se terminer par.
,!
ou?
end; 🎜🎜🎜🎜🎜🎜🎜phpdoc_to_comment [symfony]🎜🎜 Les blocs de documents doivent tous être des éléments structurés 🎜🎜🎜🎜🎜🎜🎜phpdoc_trim [symfony ; ]🎜🎜 À l'exception de la première et de la dernière partie du bloc de document, phpdoc doit avoir du contenu au début et à la fin 🎜🎜🎜🎜🎜🎜🎜phpdoc_type_to_var [symfony]🎜🎜@type
doit être ; Utilisé@var
; Les commentaires code>@ var et@type
ne doivent pas contenir de noms de variables ; 🎜🎜🎜🎜🎜🎜🎜pre_increment [symfony]🎜🎜 ne doit pas utiliser++i
; > ou --i; 🎜🎜🎜🎜🎜🎜🎜print_to_echo [symfony]🎜🎜 Si possible, utilisezecho
au lieu deprint
déclaration ; 🎜 🎜🎜🎜🎜🎜🎜remove_leading_slash_use [symfony]🎜🎜 Supprimez la ligne vide avantuse
🎜🎜🎜🎜🎜🎜🎜remove_lines_between_uses [symfony]🎜🎜 Supprimerutiliser
block Il devrait y avoir une ligne vide avant 🎜🎜🎜🎜🎜🎜🎜return [symfony]🎜🎜return
Utilisezself
au lieu du nom de la classe 🎜🎜🎜🎜🎜🎜 ; 🎜short_bool_cast [symfony]🎜🎜bool
Deux points d'exclamation ne doivent pas être utilisés avant de saisir des données 🎜🎜🎜🎜🎜🎜 🎜single_array_no_trailing_comma [symfony]🎜🎜 Il ne doit pas y avoir d'espace après le dernier élément de PHP tableau sur une seule ligne ; 🎜🎜🎜🎜🎜🎜🎜single_blank_line_before_namespace [symfony]🎜🎜 Il devrait y avoir une ligne vide avant la déclaration de l'espace de noms ; Les chaînes simples doivent utiliser des guillemets simples au lieu de guillemets doubles ; 🎜🎜🎜🎜🎜🎜🎜spaces_after_semicolon [symfony]🎜🎜 Correction de l'espace après le point-virgule 🎜🎜🎜🎜🎜🎜🎜spaces_before_s emicolon [symfony]🎜🎜 interdit Uniquement les espaces et les semi-lignes ; deux points ; 🎜🎜🎜🎜 🎜🎜🎜spaces_cast [symfony]🎜🎜 Il devrait y avoir un espace entre les variables et les modificateurs 🎜🎜🎜🎜🎜🎜🎜standardize_not_equal [symfony]🎜🎜 Utilisez<>
au lieu de! =
; 🎜🎜🎜🎜🎜🎜🎜ternary_spaces [symfony]🎜🎜 Normaliser les espaces entre les opérateurs ternaires 🎜🎜🎜🎜🎜🎜🎜trim_array_spaces [symfony]🎜🎜 Les tableaux doivent être formatés de manière similaire à la fonction ; /paramètres de la méthode, sans lignes vides au-dessus et en dessous 🎜🎜🎜🎜🎜🎜🎜unalign_double_arrow [symfony]🎜🎜 Ne pas utiliser=>
🎜🎜🎜 🎜🎜🎜🎜unalign_equals [symfony]🎜🎜 ; ne fait pas égal au signe ;🎜🎜🎜 unary_operators_spaces [symfony]
Les opérateurs et opérandes unaires doivent être adjacents ;unneeded_control_parentheses [symfony]
Supprimez les parenthèses redondantes dans les instructions de structure de contrôle ;
unused_use [symfony ] Supprimer les instructions d'utilisation inutilisées ;
whitespacy_lines [symfony] Supprimer les espaces supplémentaires dans les lignes vides ;
? > ;
; le bloc d'instruction use ; public
, protected
ou private
, abstract
et final
doivent être avant le mot-clé scope, static
Doit être situé après la portée Tutoriel vidéo PHP"