Я был удивлен, когда я запустил следующий код в своем редакторе:
<?php echo "hello"; echo "world" ?>
Как вы можете видеть, в коде отсутствует точка с запятой (;), но она по-прежнему работает!
Кто-нибудь знает, как это работает и почему; здесь {0,1}.
Потому что тег close означает точку с запятой. Подробнее об этом можно прочитать в руководстве по разделению инструкций .
И цитата оттуда:
Как и в 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)
вывод:
Ошибка анализа: синтаксическая ошибка, неожиданный конец файла, ожидающий ',' или ';' в
Поскольку точка с запятой сообщает парсеру, что вы достигли конца этой инструкции. Это позволяет ему знать, что следующий фрагмент текста – новая инструкция. Однако закрывающий тег сообщает, что мы находимся в конце всех инструкций, вам не нужно разбирать что-либо еще. Поскольку мы не разбираемся в чем-либо еще, нам не нужен конец точки с запятой, это подразумевается.
Это потому, что точка с запятой не является символом для прекращения оператора.
Это похоже на то, потому что это происходит почти всегда в конце заявления.
Обратите внимание, что почти всегда … может быть намеком.
Пытаясь избавиться от асимметрии, мы можем сказать, что это всегда между утверждениями!
Это приводит непосредственно к реальному значению точки с запятой: оно не завершает утверждения – оно отделяет утверждения .
Очевидно, что после последнего утверждения нечего отделять.
(Большинство языков допускают точку с запятой в конце блока в любом случае, чтобы предотвратить связанные тривиальные ошибки. Это можно сделать, отбросив точку с запятой или, более явную, путем вставки команды, которая ничего не делает после точки с запятой.)