【问题标题】:PHP: Is there a reason to put a newline at the end of filePHP:是否有理由在文件末尾添加换行符
【发布时间】:2012-04-12 21:30:36
【问题描述】:

当我将 php 文件提交到 github 时,我收到消息“文件末尾没有换行符”。

这只是一个警告,我记得,无论出于何种原因,在文件末尾有一个换行符都是好的。

但是为什么呢?它是早已过去的时代的残余,它仍然有优势还是在 php 中甚至是必需的?如果是,是什么原因?

【问题讨论】:

  • 与PHP无关。
  • 在差异视图中是一个警告还是只是一个声明
  • 我猜只是一个声明。就在它再次出现在我脑海中的时候。我认为在 PHP 中这样做是有原因的。

标签: php coding-style newline git-commit


【解决方案1】:

PHP 不需要它,但它可能会导致一些 diff 工具出现问题。该警告只是一个警告,如果需要可以忽略,但我建议遵循约定并将最后一个字符作为换行符。

【讨论】:

    【解决方案2】:

    警告是为了帮助您检测可能有缺陷的截断文件,假设末尾没有换行符的文件可能被截断。

    除此之外,避免没有终止换行符的源文件的唯一原因是避免警告!

    【讨论】:

      【解决方案3】:

      它可能源自 C 标准:http://c0x.coding-guidelines.com/5.1.1.2.html(第 123 段)。原因包括一些编译器或其他文本文本处理工具逐行处理源代码,因此最后一个源代码行也必须以换行符结尾。

      另请参阅:"No newline at end of file" compiler warning - include最后没有换行的文件可能会导致类似 C 中的问题。

      【讨论】:

        【解决方案4】:

        这是一个PSR-2 convention 声明:

        所有 PHP 文件必须以一个空行结尾。

        为什么?因为应该对文件进行操作的实用程序(例如diff utility)可能无法很好地处理不以换行符结尾的行;这就是POSIX 在其rules 之一中的状态:

        3.206 线

        零个或多个非 字符加上一个 终止符。

        因此,不以换行符结尾的行不被视为实际行。这意味着:如果您的最后一行是一行代码(而不是空行),则这些工具可能会忽略它,并可能导致您的程序中断!

        【讨论】:

          【解决方案5】:

          现在,在PSR-12 #2.2 Files

          所有 PHP 文件必须仅使用 Unix LF(换行)行结尾。 所有 PHP 文件必须以非空行结尾,并以单个 LF 结尾。

          【讨论】:

            【解决方案6】:

            到处添加新行的另一个原因是 git 历史。 假设你没有在文件末尾添加一个空的换行符,起初“Git blame”说是写了最后一行。

            如果其他人现在想在最后添加一个新行。他必须改变你的最后一行,没有办法。他必须添加一个\n,然后添加他的新代码......所以他的名字现在出现在您的行中只是为了添加一个简单的\n

            【讨论】:

              猜你喜欢
              • 2014-05-28
              • 1970-01-01
              • 1970-01-01
              • 2014-07-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多