为什么php中最后一条语句中的分号是可选的


Why is the semicolon optional in the last statement in php?

当我在编辑器中运行以下代码时,我感到很惊讶:

<?php
    echo "hello";
    echo "world"
?>

可以很容易地看到,代码中缺少分号(;),但它仍然有效!

这是如何工作的,为什么;在这里是{0,1}?

因为关闭标记意味着分号。您可以在说明书中的"指令分离"部分阅读更多相关内容。

还有一句话:

与C或Perl一样,PHP要求指令在每条语句的末尾以分号结尾PHP代码块的结束标记自动包含分号您不需要在PHP块的最后一行末尾使用分号。如果存在换行符,则块的结束标记将包括紧跟其后的换行符。

一个例子可以证明这一点:

1.脚本末尾缺少分号,但带有结束标记:

<?php
    echo "1";
    echo "2"
          //^ semicolon missing
?>

输出:

12

2.结尾缺少分号但没有结束标记的脚本:

<?php
    echo "1";
    echo "2"
          //^ semicolon missing (closing tag missing)

输出:

分析错误:语法错误,意外的文件结尾,应为","或";"在中

因为分号告诉解析器您已经到达该指令的末尾。它让它知道下一段文本是一条新指令。然而,结束标记告诉它我们已经完成了所有指令,您不需要解析任何其他内容。因为我们不分析任何其他内容,所以我们不需要指令末尾的分号,这是隐含的。

这是因为分号不是终止语句的符号。

它看起来是这样的,因为它几乎总是出现在语句的末尾。

请注意几乎总是。。。可能是个暗示。

为了消除不对称性,我们可以说总是语句之间!

这直接引出了分号的真正含义:它不终止语句——它分隔语句
显然,在最后一次发言之后,没有什么可分开的。


(无论如何,大多数语言都允许在块的末尾使用分号,以防止相关的琐碎错误。这可以通过丢弃分号来实现,或者更明确地说,通过在分号之后插入一个不执行任何操作的命令来实现。)