当我在编辑器中运行以下代码时,我感到很惊讶:
<?php
echo "hello";
echo "world"
?>
由于可以很容易地看到代码中缺少分号(;
),但它仍然有效!
这是如何工作的以及为什么;
在这里{0,1}?
答案 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)
这是因为分号不是终止语句的符号。
它看起来像是因为它几乎总是出现在一个陈述的末尾。
请注意 几乎总是 ...可能是一个提示。
试图摆脱不对称,我们可以说语句之间 总是 !
这直接导致了分号的真正含义:它不会终止语句 - 分隔语句。
显然,在最后一次陈述之后,没有什么可以分开的。
(大多数语言在块的末尾都允许使用分号,以防止相关的琐碎错误。可以通过丢弃分号来完成,或者更明确地,通过插入在分号后不执行任何操作的命令来完成。)