澄清PSR-2缩进规则

时间:2017-02-11 15:25:21

标签: php psr-2

PSR-2 Coding Style Guide在标签上选择4个空格缩进。我一直认为标签与空格只是一个偏好问题,而我的这种印象似乎得到了这样一个事实的支持,即使PSR-2项目成员survey也远非一致。但是,indenting部分提供了以下基本原理:

  

仅使用空格,而不是将空格与制表符混合,有助于避免   差异,补丁,历史记录和注释的问题。指某东西的用途   空间也可以很容易地插入细粒度的子压痕   行间对齐。

我的两个疑问是:

  1. 关于差异,补丁,历史记录和注释的说明是否仅限于混合缩进(不需要进一步说明的内容),或者是否存在可由(正确)制表符触发的某些特定问题缩进?

  2. "用于行间对齐的细粒度子缩进"是什么意思?是否有任何特定情况需要插入半缩进? (例子特别受欢迎。)

  3. 我很感激你不会只是阅读"标签/空格"并以意见为基础急于关闭。我要求澄清PSR-2中可以使用完全客观答案的两个非常具体的要点。这绝不是一个更好的问题。

2 个答案:

答案 0 :(得分:2)

据我所知,当您主要使用vi来编写PHP文件时,混合制表符和空格非常混乱。这样做的原因很简单,有些客户要求您使用ssh登录并在远程服务器场上工作,拒绝您下载本地计算机上的任何代码。

在客户非常关注(政府)并且有更多规则要遵循的情况下,这实际上发生在我身上。因此,我们不讨论ssh + vi可能是好的或坏的选择的原因。有时,它根本不是一种选择,而是如果你想要这项工作你必须尊重的强加。

除了编辑器之外,gitdiffgrep并不总是喜欢标签。例如,如果您有此代码:

$em = $this->getEntityManager();
// more code...

if ($some_bit)
{
    $em = $this->getEntityManager();
    // more code...
}

现在你想根据缩进来grep行:

grep -nri "    $em"
grep -nri "        $em"

在控制台上编写grep命令时,选项卡键通常用于自动完成和类似功能。插入标签并不是即时的(您可以尝试\t但这一切都取决于您实际使用的工具,并不总是可以逃避。)

另一种情况是将代码复制并粘贴到SO中,标签不可用。但这不是PSR-2的关注点,只是对标签的一个小威慑。

对于半缩进,我可以向您展示这个错误对齐的代码,但在某种程度上美学上令人愉悦。我不知道美学是否应该胜过正确的缩进。

嗯,我不喜欢它,但有时候我喜欢它。这都是基于意见的,所以......对待就是这样:一种意见。

$qb->andWhere("a = :a")
   ->andWhere("b = :b")
   ->setParameter("a", $a)
   ->setParameter("b", $b);

所有这些都是有争议的,我没有兴趣捍卫任何这些推理。我也可以使用任何类型的标签和IDE,或者尊重PSR-2或任何其他风格或指南。我根据客户的要求调整我的工作。

答案 1 :(得分:0)

  

仅关于差异,补丁,历史和注释的说明   限于混合缩进(不需要进一步的东西   解释)或是否有一些可以触发的具体问题   通过(适当的)制表符缩进?

默认情况下,Git为标签显示8个空格,下面是1个标签行,后面是4个空格行。考虑到端子不是很大,8个空间对于差异很大。虽然这可以调整。

tab v space

  

“用于行间对齐的细粒度子缩进”是什么意思   究竟?是否有任何特定情况需要   插入半个缩进? (例子特别受欢迎。)

不确定这是否是他们的想法,但是对齐“=”符号或“=>”在将值一起分配时,空格提供准确的数字,具体取决于标签宽度的值,标签看起来很糟糕。即,较小的移位将使值不对齐,较大的移位宽度将在多个选项卡上中断。各个环境的空间看起来相同