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

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

<?php

echo "hello";
echo "world"
?>

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

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

34

Решение

Поскольку закрывающий тег подразумевает точку с запятой. Вы можете прочитать больше об этом в руководстве под Разделение инструкции.

И цитата оттуда:

Как и в 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)

выход:

Ошибка разбора: синтаксическая ошибка, неожиданный конец файла, ожидание ‘,’ или ‘;’ в

70

Другие решения

Потому что точка с запятой сообщает парсеру, что вы достигли конца этой инструкции. Это позволяет ему знать, что следующий фрагмент текста — это новая инструкция. Однако закрывающий тег говорит о том, что мы в конце всех инструкций, вам больше ничего не нужно анализировать. Поскольку мы ничего не анализируем, нам не нужна точка с запятой в конце инструкции, это подразумевается.

14

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

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

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

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

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


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

4
По вопросам рекламы [email protected]