phpcs 的 PSR-2 编码标准和 Symfony2 编码标准之间的主要区别是什么?

What are the main differences between the PSR-2 coding standard and the Symfony2 code standard for phpcs?

我正在尝试找出使用 phpcs 代码嗅探器强制执行的代码风格。

自从Symfony2流行以来,使用它的代码标准似乎是一个很好的习惯。另一方面,它的代码风格是基于PSR2的,所以这似乎是最基本的风格。

此外,在squizlabs/php_codesniffer的基本安装中,没有包含Symfony2标准,必须手动安装,而PSR2很容易获得。

所以我想知道 Symfony2 指南与 PSR2 相比的主要区别,以便决定使用哪个。

例如,我意识到 Symfony2 风格强制执行 Concat operator must not be surrounded by spaces 而 PSR2 忽略这种情况。然而,我没有找到一种简单的方法来列出差异。我查看了 rulseset.xml,但我不太清楚它是如何设置的。

我对如何获得 PSR2 和 Symfony2 代码标准之间差异的完整列表感兴趣。

Symfony coding standards basically extend the PSR standards. PSR-2 并未为所有情况指定规则,因此 Symfony 标准在 PSR-2 之上添加了一些规则。

如您所说,PHP CodeSniffer 存储库不包含 Symfony 的规则集。 Symfony2 规则集有多个第三方实现,因此它们与 PSR-2 规则集之间的确切差异列表取决于您选择的实现。

但是,在查看 Symfony 和 PSR 标准(不是 PHP CodeSniffer 的规则集)之间的差异时,Symfony 标准的一些补充是:

  • 不在串联运算符周围添加空格 (.)
  • 在多行数组中的每个数组项之后添加一个逗号,即使是在最后一个之后
  • 在 return 语句之前添加一个空行(除非 return 单独位于语句组中(如 if 语句))
  • 在方法之前声明 class 属性
  • 首先声明 public 成员,然后是受保护的,然后是私有的(class 构造函数以及 PHPUnit setUptearDown 方法除外 classes)

这些只是一些示例,请查看 Symfony 编码标准以获得完整列表。

在我看来,Symfony 标准是有意义的,我会尽可能地使用它们,即使是在 Symfony 项目之外。

来自 PhpStorm 2017.1。左边是Symfony,右边是PSR-2

  • 新行中的复杂参数。

但在 Symfony site 处与规则相反:

Declare all the arguments on the same line as the method/function name, no matter how many arguments there are;

  • 不在连接运算符周围添加空格

  • 在多行数组中的每个数组项之后添加一个逗号,即使是在最后一个之后

  • 在 return 语句之前添加一个空行(除非 return 单独位于语句组中(如 if 语句))