PHP: Что такое языковые конструкции и зачем они нам нужны?

Я продолжаю встречаться с такими утверждениями, как:

  • "echo - это языковая конструкция, но print является функцией и, следовательно, имеет возвращаемое значение "
  • "die - это языковая конструкция"

Мой вопрос в том, что это за языковые конструкции и что еще важнее, зачем они нам нужны?

Ответ 1

Языковые конструкции жестко закодированы на языке PHP. Они не играют по обычным правилам.

Например, всякий раз, когда вы пытаетесь получить доступ к переменной, которая не существует, вы получите сообщение об ошибке. Чтобы проверить, существует ли переменная до ее доступа, вам необходимо обратиться к isset или empty:

if (isset($foo))

Если isset была нормальной функцией, вы также получите предупреждение, так как вы обращаетесь к $foo, чтобы передать ее в функцию isset. Так как isset является языковой конструкцией, это работает без предупреждения. Именно поэтому в документации делается четкое различие между нормальными функциями и языковыми конструкциями.

Ответ 2

Языковые конструкции - это то, что составляет язык: такие вещи, как "if" "for" "while" "function" и т.д.

В руководстве по PHP упоминаются такие вещи, как "echo", "die" или "return", чтобы было ясно, что это НЕ функции и что они не всегда ведут себя как функции.

Вы можете назвать "эхо" как "echo()", чтобы он мог запутать новичков. Вот почему они дали четкую оценку в руководстве. Чтобы это было абсолютно понятно всем.

Другими примерами языковых конструкций, которые могут быть ошибочно приняты за функции, являются "array()", "list()" и "each()".

Ответ 3

Не все языки могут быть функциями. Должна быть какая-то база, где-то, на которой вы реализуете те функции first. Элементами этой базы являются языковые конструкции (поочередно, встроенные). Они не всегда ведут себя как "нормальные" функции.

Ответ 4

Чтобы понять ответ на этот вопрос, вы должны понимать, как работают парсеры. Язык определяется синтаксисом, а синтаксис определяется ключевыми словами.

Языковые конструкции - это фрагменты кода, которые составляют основу языка PHP. Парсер рассматривает их напрямую, а не функции.

Ответ 5

Некоторые вещи просто невозможно использовать с помощью обычных функций, рассмотрим этот фрагмент:

list($el1, $el2) = array('el1', 'el2');

Что он делает, так это взятие элементов из неассоциативного массива и присваивание значений переменным, определенным в конструкции list().

Просто невозможно выполнить функции:)

Более тонким примером является isset и empty. Несмотря на то, что они выглядят как функции, одна вещь, которая невозможна только с функциями - они не генерируют уведомления переменной undefined или

Ответ 6

языковые конструкции могут быть сформированы более чем одним способом и имеют возвращаемое значение

print("asdf"); возможно как print "asdf"; и вернет 1.

echo("asdf"); равен echo "asdf;", но не имеет возвращаемого значения.

die("asdf"); равен exit("asdf"); и не имеет возвращаемого значения.