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

use*_*529 36 php syntax

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

<?php

    echo "hello";
    echo "world"

?>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,代码缺少分号(;),但它仍然有效!

有谁知道这是如何工作的,为什么; 这是{0,1}吗?

Riz*_*123 72

因为close标签意味着分号.您可以在" 指令分离"下的手册中阅读更多相关信息.

从那里引用:

与在C或Perl中一样,PHP要求在每个语句结尾处以分号结束指令.PHP代码块的结束标记自动表示分号; 你不需要一个分号来终止PHP块的最后一行.块的结束标记将包括紧接着的新行(如果存在).

一个证明这一点的例子:

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

<?php
    echo "1";
    echo "2"
          //^ semicolon missing
?>
Run Code Online (Sandbox Code Playgroud)

输出:

12
Run Code Online (Sandbox Code Playgroud)

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

<?php
    echo "1";
    echo "2"
          //^ semicolon missing (closing tag missing)
Run Code Online (Sandbox Code Playgroud)

输出:

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


Sty*_*hon 15

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