Подтвердить что ты не робот

Почему точка с запятой необязательна в последнем утверждении в php?

Я был удивлен, когда я запустил следующий код в своем редакторе:

<?php

    echo "hello";
    echo "world"

?>

Как вы можете видеть, в коде отсутствует точка с запятой (;), но она по-прежнему работает!

Кто-нибудь знает, как это работает и почему; здесь {0,1}.

4b9b3361

Ответ 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

Это потому, что точка с запятой не является символом для завершения оператора.

Это похоже на то, что оно встречается почти всегда в конце инструкции.

Обратите внимание, что почти всегда... может быть подсказкой.

Попытка избавиться от асимметрии, мы можем сказать, что всегда между операторами!

Это приводит непосредственно к реальному значению точки с запятой: она не завершает утверждения - она ​​ разделяет утверждения.
Очевидно, что после последнего утверждения нечего отделять.


(Большинство языков допускают точку с запятой в конце блока в любом случае, чтобы предотвратить связанные с ней тривиальные ошибки. Это можно сделать, отбросив точку с запятой или, более явную, путем вставки команды, которая ничего не делает после точки с запятой).