PHP开发规范之使用phpcbf脚本自动修正代码格式

在前段时间的文章:在PhpStorm中安装使用PHP_CodeSniffer编码规范检查工具中提到过phpcbf脚本

phpcbf脚本能自动修正代码格式上不符合规范的部分,比如 PSR2规范中对每一个PHP文件的结尾都需要有一行空行,那么运行这个脚本后就能自动在结尾处加上一行空行

今天就说一下这个脚本怎么集成在PhpStorm中,方便我们使用

安装

看过之前文章的同学应该已经都安装了,没看过的去看一下之前的文章,使用pear 安装PHP_CodeSniffer

安装成功后,你的PHP根目录中会有多出一些文件,包括以下文件:

phpcbf
phpcbf.bat
phpcs
phpcs.bat

使用

先说一点,phpcbf只能处理代码风格等方式,而不能帮你处理里面的命名与代码实现规则,所以有少部分还需要人为去更正,但并不会太多,强迫症勿纠结

命令行模式

这里也提一下phpcs的使用,一般来说我们都会把 PHP 加入环境变量,phpcbfphpcs在 PHP 的目录下,所以可以直接使用命令行去操作,如果不行的话,添加一下环境变量

设置默认标准

phpcs默认的编码格式并不是php-cs,所以当不指定标准的时候,检测的结果并不准确,但每次都手动指定也挺麻烦,所以可以设置一个默认标准,命令如下:

phpcs --config-set default_standard PSR2
phpcbf --config-set default_standard PSR2

实操

然后我们来实际操作一下,先准备一个PHP文件,文件里面的内容如下代码示例,可以看出这份代码并不符合PSR-2的风格规范

<?php

function test_test(){
    echo 'sy-records';
}
 
 
test();

使用命令来检测一下

phpcs D:/phpStudy/WWW/test.php

命令执行完成之后,可以看到如下代码提示,在提示中就能看到具体哪一行,提示级别,以及具体的提示原因

--------------------------------------------------------------------------------
FOUND 4 ERRORS AND 1 WARNING AFFECTING 4 LINES
--------------------------------------------------------------------------------
1 | WARNING | [ ] A file should declare new symbols (classes, functions,
  |         |     constants, etc.) and cause no other side effects, or it
  |         |     should execute logic with side effects, but should not do
  |         |     both. The first symbol is defined on line 3 and the first
  |         |     side effect is on line 7.
1 | ERROR   | [x] End of line character is invalid; expected "\n" but found
  |         |     "\r\n"
3 | ERROR   | [x] Opening brace should be on a new line
4 | ERROR   | [x] Spaces must be used to indent lines; tabs are not allowed
7 | ERROR   | [x] Expected 1 newline at end of file; 0 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 4 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------

Time: 108ms; Memory: 4Mb

我们来使用自动格式化编码风格命令

phpcbf D:/phpStudy/WWW/test.php

命令执行完成之后,可以看到如下返回提示,处理了哪一些文件,以及类型

PHPCBF RESULT SUMMARY
----------------------------------------------------------------------
FILE                                                  FIXED  REMAINING
----------------------------------------------------------------------
D:\phpStudy\WWW\test.php                              4      1
----------------------------------------------------------------------
A TOTAL OF 4 ERRORS WERE FIXED IN 1 FILE
----------------------------------------------------------------------

Time: 195ms; Memory: 4Mb

然后我们再次使用检测命令进行检测

FILE: D:\phpStudy\WWW\test.php
--------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------
1 | WARNING | A file should declare new symbols (classes, functions,
  |         | constants, etc.) and cause no other side effects, or it should
  |         | execute logic with side effects, but should not do both. The
  |         | first symbol is defined on line 3 and the first side effect is
  |         | on line 8.
--------------------------------------------------------------------------------

Time: 106ms; Memory: 4Mb

能看到最开始检测有四次不合格,但现在只剩下一处了

这里说一下为什么phpcbf没有完全帮处理呢,因为phpcbf只能处理代码风格等方式,而不能帮你处理里面的命名与代码实现规则,所以有少部分还需要人为去更正,但并不会太多

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHP开发规范之使用phpcbf脚本自动修正代码格式

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Linux下DNS服务(Bind9)之Web管理利器-NamedManager部署说明

NamedManager 是一个基于Web的DNS管理系统,可用来添加、调整和删除DNS的zones/records数据。它使用Bind作为底层DNS服务,提供...

1.1K8
来自专栏Netkiller

高级运维工程师面试题(更新中)

高级运维工程师 服务器硬件 RAID 磁盘阵列 简述 RAID? RAID 0 5 6 10 50 都适用于那些场景? 数据库适用那种 RAID? RAID 1...

7674
来自专栏Brian

Mac 配置终端环境

Mac 配置终端开发环境 ---- 概述 作为一个服务端开发人员基本上都是通过终端和服务器打交道,所以一个好个开发人员那么他的终端配置也是高效的。“工欲善事必先...

42711
来自专栏安恒网络空间安全讲武堂

打个3dsctf,电脑机都开不了?

3DSCTF Malware 3道题 writeup tags: - Reverse - malware ---- 这个ctf有个Malware的题型,...

2489
来自专栏计算机编程

SNS项目笔记<四>--RXjs简要用法

在命令行输入ionic g provider youProviderName 在创建好后,系统会自动导入从@angular/http里导入Http这个类,方便后...

1354
来自专栏智能大石头

NewLife.Net——开始网络编程

网络编程的重要性就不说了,先上源码:https://github.com/nnhy/NewLife.Net.Tests

910
来自专栏我和未来有约会

Silverlight 3.0 中的 Local Connection

现在很多的需求中需要一个插件实例和另一个实例进行通讯。在同一个页面中调用Html、js等来通讯,而这个往往有一些限制,需要专门的去设置一些权限。在Silverl...

2117
来自专栏大魏分享(微信公众号:david-share)

用Ansible自动供应vmware虚拟机--构建数据中心一体化运维平台第二篇

1.1 简述 一直以来,打开邮箱被ticket糊一脸的事情时有发生。我一直在想,能不能以一种简单的方案(不花老板的钱)来供应(provisioning)虚拟机呢...

6622
来自专栏一个会写诗的程序员的博客

Node.js 中使用 ES6 中的 import / export 的方法大全

Node.js 中使用 ES6 中的 import / export 的方法大全

2202
来自专栏JadePeng的技术博客

K8S集群安装

主要参考 https://github.com/opsnull/follow-me-install-kubernetes-cluster

4792

扫码关注云+社区