Php 关于PSR-2缩进规则的澄清

Php 关于PSR-2缩进规则的澄清,php,psr-2,Php,Psr 2,选择4空间缩进而不是制表符。我一直认为制表符与空格只是偏好的问题,而我的这种印象似乎也得到了这样一个事实的支持,即即使是PSR-2项目成员也远未达成一致。但是,本节提供了以下理由: 仅使用空格,而不将空格与制表符混合,有助于避免 差异、修补程序、历史记录和注释的问题。使用 空格还可以方便地插入细粒度的子缩进 线间对齐 我的两个疑问是: 关于差异、补片、历史记录和注释的注释是否仅限于混合缩进(无需进一步解释),或者是否存在某些特定问题,这些问题可能由(适当的)选项卡缩进触发 “用于线间对齐的细粒度

选择4空间缩进而不是制表符。我一直认为制表符与空格只是偏好的问题,而我的这种印象似乎也得到了这样一个事实的支持,即即使是PSR-2项目成员也远未达成一致。但是,本节提供了以下理由:

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

我的两个疑问是:

  • 关于差异、补片、历史记录和注释的注释是否仅限于混合缩进(无需进一步解释),或者是否存在某些特定问题,这些问题可能由(适当的)选项卡缩进触发

  • “用于线间对齐的细粒度子压痕”的确切含义是什么?是否存在需要插入半个缩进的特定情况?(例子特别受欢迎。)



  • 我很感激你不要只看“标签/空格”,而是根据自己的意见匆忙结束。我要求澄清PSR-2中的两个非常具体的问题,这两个问题可以使用非常客观的答案。这绝不是一个关于什么更好的问题。

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

    事实上,在我遇到的一个案例中,客户非常关心安全(政府),需要遵守更多的规则。因此,我们不必讨论为什么
    ssh
    +
    vi
    可能是一个好的选择,也可能是一个坏的选择。有时候,这根本不是一种选择,而是一种强加,如果你想要这份工作,你必须尊重它

    在编辑器之外,
    git
    diff
    grep
    并不总是喜欢选项卡。例如,如果您有以下代码:

    $em = $this->getEntityManager();
    // more code...
    
    if ($some_bit)
    {
        $em = $this->getEntityManager();
        // more code...
    }
    
    现在,您要根据缩进来
    grep
    行,您可以执行以下操作:

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

    另一种情况是将代码复制并粘贴到此处,因此无法使用制表符。但这不是PSR-2的担忧,这只是对tabs的一个小小的威慑

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

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

    $qb->andWhere("a = :a")
       ->andWhere("b = :b")
       ->setParameter("a", $a)
       ->setParameter("b", $b);
    
    所有这些都是有争议的,我没有兴趣为这些理由辩护。我还可以使用任何类型的标签和IDE,或者使用PSR-2或任何其他样式或指南。我根据客户的要求调整工作

    注释是否仅涉及差异、补丁、历史记录和注释 仅限于混合缩进(不需要进一步的 解释)或是否存在可能触发的特定问题 是否按(正确的)制表符缩进

    默认情况下,Git为一个选项卡显示8个空格,下面是1个选项卡行,后跟4个空格行。8个空间对于diff来说是巨大的,因为终端不是很大。虽然这是可以调整的

    “线间对齐的细粒度子压痕”是什么意思 确切地是否有任何具体情况需要 插入半个缩进?(例子特别受欢迎。)


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

    我对你的问题没有答案,但如果我没有正确解释的话,看看这个问题的固定版本。您的diff具有混合缩进(第一行使用制表符,第二行使用空格),我的问题是关于仅制表符缩进。关于第二点,为了确保我理解,您实际上指的是对齐而不是缩进,不是吗?我已经在堆栈溢出处粘贴了很多次选项卡式代码,没有出现问题,但Unix shell示例是我没有想到的。fluent接口片段也很有用(我个人会将第一个方法调用移到新行,但我理解这一点)。非常感谢。是的,将标签粘贴到SO中是可能的,但当我习惯于使用标签粘贴SO编辑器时,我会推迟,因为它无法按预期工作。相反,当我习惯了空格时,我没有这个问题,但是我必须把空格打四倍,这也是一个烦恼。根据我在过去几天左右写的内容,我会将“习惯”转换为任何一种方式,但在工作中,它始终是100%的空格。我现在想到的另一件事是多平台代码。很像CRLF/LF的烦恼,您可能在一个平台上有一个首选IDE,在另一个平台上有另一个IDE。在这些之间切换时,可能有点不直观。另一个例子是。我有一台笔记本电脑,安装了LinuxMint,因为它的性能非常低。我所要做的就是在
    vi
    +
    git
    中编写代码。我的桌面是带有Visual Studio的Windows 10。您可以想象这些IDE有多么不同。保持代码整洁并不困难,但这需要一点点的关注。仅仅使用空格有时是比较容易的选择。尽管它们很有趣,但最后的几点