【问题标题】:What will line ending cause when programming?编程时行结束会导致什么?
【发布时间】:2018-06-24 08:35:06
【问题描述】:

PSR-2 document 的 2.2 中有一件事情让我很困惑。

我只知道不同的操作系统默认使用不同的行尾:

  • windows:CRLF
  • unix:LF
  • mac:CR

我想知道为什么“所有 PHP 文件必须使用 Unix LF(linefeed) 行尾”。或者换句话说,行结束会导致什么?

【问题讨论】:

    标签: php newline line-endings psr-2 php-fig


    【解决方案1】:

    这背后的主要原因是 scv(源代码版本控制),其中更改行尾会导致不必要的差异和冲突。

    其次,我们通常在基于 Unix 的 Linux 上提供服务,使用 LF 文件结尾。

    第一个导致需要标准,第二个告诉您为什么应该使用LF 标准。

    windows:CRLF = '\r\n'
    unix:LF      = '\n'
    mac:CR       = '\r' // macOS also changed to LF a long time ago btw.
    

    更新: 还要注意,虽然 PHP - 和 imo。所有其他脚本语言 - 并不真正依赖于特定的行尾,在其他语言中这可能会导致问题。

    【讨论】:

    • 我的回答可能不清楚,但我认为“更改行尾会导致不必要的差异和冲突”。
    • 另外,如果设置得当,像git这样的scv工具可以自动处理行尾差异。
    • 哈哈,大多数事情都能做大多数事情,如果设置得当:-p
    • @Martin 这是肯定的。但是这个来晚了 git 例如。 ?Ofc。我们本可以在很久以前就进行 PR。
    【解决方案2】:

    PSR 用于解决编码风格冲突。 EOL 是一个冲突点,因此它以某种方式定义了它。 PSR 工作组在 line_endings 问题中投票为 ?: 5, LF: 17。 https://groups.google.com/forum/#!msg/php-fig/c-QVvnZdMQ0/TdDMdzKFpdIJ

    即使它不会导致任何语法差异,在 PSR-2 标准中也是这样定义的。

    【讨论】:

      【解决方案3】:

      在您的 PHP 程序中使用其他行尾仍然有效。但是该规则的目的在该页面的开头(PSR-2)中说明:

      这里的风格规则来源于 各种会员项目。当不同的作者跨界合作时 多个项目,使用一组指南会有所帮助 在所有这些项目中。因此,本指南的好处并不在于 规则本身,但在这些规则的共享中。

      【讨论】:

      • 谢谢。我明白你的观点,PSR 是为了共享规则。但是还有一个问题,如果我们在编程时使用不同的行尾会导致什么?比如在类unix系统中使用CRLF或者在windows中使用LF。或者甚至将它们都推送到一个存储库。
      • 正如@balintant 的回答中提到的,不同的行尾可能会导致一些源代码控制系统识别源代码中没有差异并创建新的源文件版本,因为行尾是不同的。 PSR2 添加了此行结束规则以避免该问题。
      猜你喜欢
      • 2012-10-06
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多