37

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

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

但为什么?它是很久以前的遗迹,它仍然有优势还是在 php 中甚至是必需的?如果是,是什么原因?

4

6 回答 6

26

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

于 2012-03-29T08:50:00.280 回答
22

这是一个PSR-2 公约,其中规定:

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

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

3.206线

零个或多个非 <newline> 字符加上一个终止字符的序列。

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

于 2017-10-04T11:51:28.800 回答
6

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

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

于 2012-03-29T08:50:04.960 回答
4

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

另请参阅:“文件末尾没有换行符”编译器警告-最后没有换行符的文件include可能会导致类似 C 中的问题。

于 2012-03-29T08:51:24.637 回答
4

现在,在PSR-12 #2.2 文件中:

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

于 2019-08-15T02:31:16.657 回答
1

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

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

git 说 2 行只添加了 1 行

于 2021-09-13T15:55:01.940 回答