4

PSR-2 编码风格指南在制表符上选择 4 空格缩进。我一直认为制表符与空格只是一个偏好问题,我的这种印象似乎得到了这样一个事实的支持,即使 PSR-2 项目成员的调查也远非一致。但是,缩进部分提供了以下基本原理:

仅使用空格,而不是将空格与制表符混合使用,有助于避免差异、补丁、历史记录和注释的问题。使用空格还可以轻松插入细粒度的子缩进以进行行间对齐。

我的两个疑问是:

  1. 关于差异、补丁、历史和注释的注释是否仅限于混合缩进(无需进一步解释),还是有一些特定问题可以由(适当的)制表符缩进触发?

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


我很感激您不只是阅读“标签/空格”并根据意见急于关闭。我要求对 PSR-2 中可以使用完全客观答案的两个非常具体的点进行澄清。这绝不是什么更好的问题。

4

2 回答 2

2

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

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

除了编辑器之外,所有的标签git都不总是喜欢的。例如,如果您有以下代码:diffgrep

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

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

现在您想要grep基于缩进的行,您可以执行以下操作:

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

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

另一种情况是将此处的代码复制并粘贴到 SO 中,无法使用选项卡。但这不是 PSR-2 关心的问题,这只是对tabs的轻微威慑。

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

好吧,我并不总是喜欢它,但有时我喜欢。这都是基于意见的,所以......对待就是这样:意见。

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

所有这些都是有争议的,我没有兴趣为这些推理辩护。我还可以使用任何类型的选项卡和 IDE 或遵循 PSR-2 或任何其他样式或指南。我根据客户的要求调整我的工作。

于 2017-02-11T18:26:00.370 回答
1

关于差异、补丁、历史和注释的注释是否仅限于混合缩进(无需进一步解释),还是有一些特定问题可以由(适当的)制表符缩进触发?

Git 默认为一个制表符显示 8 个空格,下面是 1 个制表符行,后跟 4 个空格行。考虑到终端不是很大,8个空间对于差异来说是巨大的。虽然这可以调整。

制表符 v 空格

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

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

于 2017-02-11T19:08:47.323 回答