【问题标题】:Why is the semicolon optional in the last statement in php?为什么在php的最后一条语句中分号是可选的?
【发布时间】:2015-03-26 16:38:34
【问题描述】:

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

<?php

    echo "hello";
    echo "world"

?>

很容易看出,代码中缺少分号 (;),但它仍然有效!

这是如何工作的,为什么; 会出现在{0,1} 此处?

【问题讨论】:

  • 因为语言规范说是这样的。
  • 这类似于 Pascal 在 end;end. 之前的最后一行不需要分号。
  • @Schism 我可能弄错了,但我相信 Pascal 不使用语句 terminators 而是 separators;换句话说,你不能放最后一个分号;分号仅用于两个单独的两个语句。见here。但是,较新的版本确实允许使用结束分号,但它是可选的,正是因为以前的标准要求不使用它。
  • @Bakuriu 嗯,直到!我学习 Pascal 很晚(200x),但我不知道早期版本不允许它。谢谢你的启发:-)

标签: php syntax


【解决方案1】:

因为关闭标签意味着分号。您可以在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)

输出:

解析错误:语法错误,文件意外结束,需要 ',' 或 ';'在

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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


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

      【讨论】:

      • 只需阅读manual 中的第一行并从那里引用:As in C or Perl, PHP requires instructions to be 终止 with a semicolon at the end of each statement.
      • 这是同一文档的第二行: PHP 代码块的结束标记自动暗示分号;您不需要在 PHP 块的最后一行结束分号。
      猜你喜欢
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多