0

0

这个php-cs-fixer编码格式化工具,你还不会用吗?

藏色散人

藏色散人

发布时间:2021-09-14 15:31:29

|

4839人浏览过

|

来源于segmentfault

转载

php-cs-fixer - php 编码格式化工具

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 下载:

立即学习PHP免费学习笔记(深入)”;

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 代码,最后返回一个 Symfony\CS\ConfigInterface 的实例即可。你可以设置格式化的选项、级别、文件以及目录。

下面是一个简单的例子:

<?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]
      使用 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]
      删除非空行之后多余的空格;

    百宝箱
    百宝箱

    百宝箱是支付宝推出的一站式AI原生应用开发平台,无需任何代码基础,只需三步即可完成AI应用的创建与发布。

    下载
  • visibility [PSR-2]
      每个属性和方法都必须指定作用域是 publicprotected 还是 privateabstractfinal 必须位于作用域关键字之前,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 而不是 integerbool 而不是 booleanfloat 而不是 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。

推荐学习:《PHP视频教程

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.4万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号