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");
и не имеет возвращаемого значения.