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

时间:2015-03-26 16:38:34

标签: php syntax

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

<?php

    echo "hello";
    echo "world"

?>

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

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

3 个答案:

答案 0 :(得分:71)

因为close标签表示分号。您可以在Instruction separation下的手册中了解更多相关信息。

从那里引用:

  

与在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)

输出:

  

解析错误:语法错误,意外的文件结束,期待&#39;,&#39;或&#39;;&#39;在

答案 1 :(得分:15)

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

答案 2 :(得分:4)

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

它看起来像是因为它几乎总是出现在一个陈述的末尾。

请注意 几乎总是 ...可能是一个提示。

试图摆脱不对称,我们可以说语句之间 总是

这直接导致了分号的真正含义:它不会终止语句 - 分隔语句
显然,在最后一次陈述之后,没有什么可以分开的。


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