当我在编辑器中运行以下代码时,我感到很惊讶:
<?php
echo "hello";
echo "world"
?>
由于可以很容易地看到代码中缺少分号(;
),但它仍然有效!
这是如何工作的以及为什么;
在这里{0,1}?
因为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)
输出:
解析错误:语法错误,意外的文件结束,期待','或';'在
因为分号告诉解析器您已到达该指令的末尾。它让它知道下一段文本是一条新指令。但是,结束标记告诉它我们在所有指令的末尾,你不需要解析任何其他指令。因为我们没有解析任何其他东西,所以我们不需要结束指令分号,这是隐含的。
这是因为分号不是终止语句的符号。
它看起来像是因为它几乎总是出现在语句的末尾。
注意几乎总是......可能是一个暗示。
试图摆脱不对称,我们可以说它总是在陈述之间!
这直接导致了分号的真正含义:它不会终止语句 - 它会分隔语句。 显然,在最后一次陈述之后,没有什么可以分开的。
(大多数语言都允许在块的末尾使用分号,以防止相关的琐碎错误。可以通过丢弃分号来完成,或者更明确地,通过插入在分号后不执行任何操作的命令来完成。)