Почему точка с запятой необязательна в последнем утверждении в php?
Я был удивлен, когда я запустил следующий код в своем редакторе:
<?php
echo "hello";
echo "world"
?>
Как вы можете видеть, в коде отсутствует точка с запятой (;), но она по-прежнему работает!
Кто-нибудь знает, как это работает и почему; здесь {0,1}.
Ответы
Ответ 1
Поскольку тег close подразумевает точку с запятой. Подробнее об этом можно прочитать в разделе Разделение инструкций.
И цитата оттуда:
Как и в C или Perl, PHP требует, чтобы инструкции заканчивались точкой с запятой в конце каждого оператора. Закрывающий тег блока кода PHP автоматически означает точку с запятой; вам не нужно иметь точку с запятой, завершающую последнюю строку блока PHP. Закрывающий тег для блока будет включать в себя сразу завершающую новую строку, если она присутствует.
Пример для доказательства:
1. script с отсутствующей точкой с запятой в конце, но с закрывающим тегом:
<?php
echo "1";
echo "2"
//^ semicolon missing
?>
выход:
12
2. script с отсутствующей точкой с запятой в конце, но без закрывающего тега:
<?php
echo "1";
echo "2"
//^ semicolon missing (closing tag missing)
выход:
Ошибка анализа: синтаксическая ошибка, неожиданный конец файла, ожидающий ',' или ';' в
Ответ 2
Поскольку точка с запятой сообщает парсеру, что вы достигли конца этой инструкции. Это позволяет ему знать, что следующий фрагмент текста - новая инструкция. Однако закрывающий тег сообщает, что мы находимся в конце всех инструкций, вам не нужно разбирать что-либо еще. Поскольку мы не разбираемся в чем-то еще, нам не нужен конец точки с запятой команды, это подразумевается.
Ответ 3
Это потому, что точка с запятой не является символом для завершения оператора.
Это похоже на то, что оно встречается почти всегда в конце инструкции.
Обратите внимание, что почти всегда... может быть подсказкой.
Попытка избавиться от асимметрии, мы можем сказать, что всегда между операторами!
Это приводит непосредственно к реальному значению точки с запятой: она не завершает утверждения - она разделяет утверждения.
Очевидно, что после последнего утверждения нечего отделять.
(Большинство языков допускают точку с запятой в конце блока в любом случае, чтобы предотвратить связанные с ней тривиальные ошибки. Это можно сделать, отбросив точку с запятой или, более явную, путем вставки команды, которая ничего не делает после точки с запятой).