search

Home  >  Q&A  >  body text

PHP文件最后空一行的原因是什么?

PHP FIG中提及:

All PHP files MUST end with a single blank line. -- 来源

有说是方便命令行下查看代码时最后一行代码和命令行提示符分隔开。

PHP中文网PHP中文网2896 days ago717

reply all(4)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 14:39:45

    简而言之:

    文件的以空行结尾是Unix的惯例

    原因如下

    • 不以空行结尾的文件输出容易混淆:
    konrad$ more testfile.txt
    Line one
    Line twokonrad$
    
    • 不以空行结尾的文件统计行数会出错:
    $ echo -n "Line not ending in a new line" | wc -l
    0
    $ echo "Line ending with a new line" | wc -l
    1
    

    也有提到GCC默认必须以空行结束、为了方便readline工具读取等等说法,恕我不能一一考证

    参考链接:
    1.http://stackoverflow.com/questions/729692/why-should-files-end-with-a-newline
    2.https://github.com/php-fig/fig-standards/pull/58#issuecomment-10306841

    reply
    0
  • PHPz

    PHPz2017-04-10 14:39:45

    换行是一行结束的标志,虽然一般会显示为下一行开始处的一个光标,但逻辑上应该是在上一行的结尾的。

    比如在 C 语言中我们要 include 头文件:

    #include "A.h"
    #include "B.h"
    
    // A.h
    last line of A
    // B.h
    first line of B
    

    如果 A.h 的末尾没有一个换行,那么会最后一行会直接和 B.h 混在一起:

    last line of Afirst line of B
    

    所以逻辑上来讲,最后的换行就应当是文件的一部分。
    C 语言,以及后来的其他语言的编译器都要求文件末尾具有一个换行。

    reply
    0
  • 迷茫

    迷茫2017-04-10 14:39:45

    每行末尾都使用换行符,这是发源于Unix的习惯,可以查资料了解并不过多解释。

    这样做的一个好处是有助于保证数据的一致性:每一行一定表示为“内容+换行符”。——数据一致性有一个便利性在于:不必关心最后一个元素后边没有分隔符的问题。

    以PHP的数组为例,PHP数组支持[1, 2, 3,]这样最后一个元素后边有逗号的语法,就是为了保证分行定义时,不必特意关心最后一个元素后边的逗号怎么处理:

    [
     'string constant 1', 
     'string constant 2', 
     'string constant 3', 
    ]
    

    Python也在list和tuple上采用同样的实践,甚至将有无逗号用来区别tuple和括号括起来的常量:

    (1) # Integer 1
    (1, ) # Tuple with only one element
    

    相比之下,JSON的实践就差了一些:JSON强制要求删除最后一个元素后边的逗号。

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 14:39:45

    主要有两个理由:

    • 某些工具(特别是比较古老的),如果文件的末尾没有\n或\r,就会忽略最后一行。
    • 最后有一个空行,便于判断这个文件传输完整(而不是只传了一半

    reply
    0
  • Cancelreply