Why is the semicolon optional in the last statement in php?
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.
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