了解Golang语言的小伙伴都记得Golang官方提供了一个格式化代码的工具Gofmt,目标是易于编写、阅读、维护,并提供一致的编码方式。团队大了,项目多了,甚至不同成员用不同系统电脑系统、编辑器,此时编码风格统一就显得越来越重要,并且是放在代码评审之前的第一步。那么对于PHP代码风格,我们又可以借助那些工具呢?

php-cs-fixer

PHP CS Fixer 是代码标准修复工具,当你想把 PHP 编码标准定义为 PSR-1 和 PSR-2 文件标准时,它能修复你代码中的大部分问题。 如果你已经用 PHP_CodeSniffer 在你的代码中辨识编码问题,你应该知道,手动修复他们是件乏味的事情,尤其是在大型项目中。这个工具就是为解决这个麻烦而生的。
这是一个跨平台、跨编辑器的软件工具,具体安装和使用方法可以参考官方文档: PHP Coding Standards Fixer

VSCode

[原创]方法总是有-统一PHP编码风格工具有N种 - 图1

Sublime text

image.png

http://packagecontrol.cn/packages/PHP%20CS%20Fixer

Phpstorm commit

第一步
IDE设置:Editor > Code Stype > PHP 右边Set from 选择 Predefined Style ,选项中 PSR1/PSR2

image.png

第二步
利用编辑器提交工具,点击飞机样式的图标,或者 快捷键Ctrl + k,就打开了提交代码的对话框
image.png

第三步
勾选Before Commit 需要做的工作
image.png

这里有三个和代码风格相关的:

  • Reformat code 根据刚刚设置的代码风格格式对代码格式化
  • Rearrange code 重新整理代码(有可能会调整命名空间、变量、方法等的顺序和位置)
  • Optimize imports 最优化导入(比如没有被引用的命名空间会被去掉;使用不合理的命名空间引用也会设置规范)

ctrl+alt+L手动格式化

这个不用细说,但是要记得提前设置php的code style,比如 PSR1/PSR2

StyleCI

这是一个web应用,用在持续集成场景下对多种开发语言的代码进行规范检查,并且这个工具是git生态的,如果是开源项目可以尝试使用这个工具。“StyleCI确保你的代码总是符合你的设定。”


StyleCI provides checks for both your open and closed source repos. By analyzing every push or pull request made on your codebase, StyleCI ensures that your code is always written against the standards you want it to be.

官方网站:https://styleci.io/

EditorConfig

EditorConfig是以 .editorconfig 文件形式保存在项目目录下的定义指定代码遵守的规则,如文件编码、换行符、空格等相对比较基本的规范。文件内容如下

  1. root = true
  2. [*]
  3. end_of_line = lf
  4. insert_final_newline = true
  5. [*.{js,py}]
  6. charset = utf-8
  7. [*.py]
  8. indent_style = space
  9. indent_size = 4

以达到同一个项目支持跨编辑器或IDE遵守相同的代码风格。

目前很多编辑器、IDE也以插件的形式支持这个功能,比如Phpstorm:
image.png

安装这个插件后,新增的文件都会自动按照文件定义的规则定义文件,不过还需要注意的一点是:
image.png

Editor > Code Style 主设置面板下,勾选 Enable EditorConfig support

支持的规则列表:
https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties

利用编辑器自定义

加入有特定的风格,自定义的样式,这样要做代码规范只有一个手段就是导入设置,每个团队成员都统一用同一份编辑器设置,然后每次提交格式化就可以了。
当然你也可以把项目目录下的 .idea 目录相关文件加入版本管理。

总结

  • 一般来讲,代码格式化最好放在本地,commit前 利用 Ctrl + Alt + L 随手格式化调,这也是代价最小的最方便的,如果习惯用Phpstorm的提交工具也可以依赖他们的自动格式化。

  • php-cs-fixer这个工具相对来说就没那么方便了,要执行命令才能触发。

  • StyleCI比较适合配合github/gitlab等生态在提交代码后远程格式化处理,处理后会重新向分支发起一个PR合并进去。

  • EditorConfig只能满足基本的,也是代码风格的底线。