Why is the semicolon optional in the last statement in php?

后端 未结 3 505
春和景丽
春和景丽 2020-12-03 16:32

I was surprised when I ran the following code in my editor:


As it can be easily see

相关标签:
3条回答
  • 2020-12-03 17:08

    Because the semicolon tells the parser that you've reached the end of that instruction. It lets it know that the next piece of text is a new instruction. However the closing tag tells it that we're at the end of all instructions, you don't need to parse anything else. Because we're not parsing anything else we don't need the end of instruction semicolon, it's implied.

    0 讨论(0)
  • 2020-12-03 17:12

    Because the close tag implies a semicolon. You can read more about this in the manual under Instruction separation.

    And a quote from there:

    As in C or Perl, PHP requires instructions to be terminated with a semicolon at the end of each statement. The closing tag of a block of PHP code automatically implies a semicolon; you do not need to have a semicolon terminating the last line of a PHP block. The closing tag for the block will include the immediately trailing newline if one is present.

    An example to prove this:

    1. script with missing semicolon at the end, but with closing tag:

    <?php
        echo "1";
        echo "2"
              //^ semicolon missing
    ?>
    

    output:

    12
    

    2. script with missing semicolon at the end, but without closing tag:

    <?php
        echo "1";
        echo "2"
              //^ semicolon missing (closing tag missing)
    

    output:

    Parse error: syntax error, unexpected end of file, expecting ',' or ';' in

    0 讨论(0)
  • 2020-12-03 17:20

    That is because the semicolon is not a symbol to terminate a statement.

    It looks like that because it occurs almost always at the end of a statement.

    Note the almost always... could be a hint.

    Trying to get rid of the asymmetry, we can say it is always between statements!

    That leads directly to the real meaning of the semicolon: it does not terminate statements - it separates statements.
    Obviously, after the last statement, there is nothing to separate.


    (Most languages allow a semicolon at the end of a block anyway, to prevent the related trivial errors. It can be done by discarding the semicolon, or, more explicit, by inserting a command that does nothing after the semicolon. )

    0 讨论(0)
提交回复
热议问题