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

问题描述 投票:34回答:3

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

<?php

    echo "hello";
    echo "world"

?>

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

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

php syntax
3个回答
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)

输出:

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


15
投票

因为分号告诉解析器您已到达该指令的末尾。它让它知道下一段文本是一条新指令。但是,结束标记告诉它我们在所有指令的末尾,你不需要解析任何其他指令。因为我们没有解析任何其他东西,所以我们不需要结束指令分号,这是隐含的。


4
投票

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

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

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

试图摆脱不对称,我们可以说它总是在陈述之间!

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


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

© www.soinside.com 2019 - 2024. All rights reserved.