2010-07-15 4 views
10

Я продолжаю встретив заявления, как:PHP: Что такое языковые конструкции и зачем они нам нужны?

  • «эхо является языковой конструкцией, но печать является функцией и, следовательно, имеет возвращаемое значение»
  • «Жребий конструкция языка»

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

ответ

2

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

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

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

Просто не может быть сделано с функциями :)

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

+0

Вы можете повторно реализовать 'empty' с' isset': 'function empty (& $ var) {return! Isset ($ var) || ! $ Вар; } ' – Gumbo

+0

@Gumbo: конечно, но вам все еще нужна конструкция isset() –

6

Языковые конструкции - это то, что составляет язык: такие вещи, как «если», «для», «пока» и «функция» и т. Д.

В руководстве по PHP упоминаются такие вещи, как «эхо», «смерть» или «возвращение», чтобы было ясно, что это НЕ функции и что они не всегда ведут себя как функции.

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

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

+2

К сожалению, синтаксическое описание языковых конструкций в руководстве по PHP также запутывает. Просто взгляните на «echo»: он говорит «void echo (string $ arg1 [, string $ ...])', но 'echo ($ arg1, $ arg2);' неверно. – Gumbo

4

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

16

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

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

if (isset($foo)) 

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

0

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

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

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

die("asdf"); равно exit("asdf"); и не имеет возвратной стоимости.

3

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

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

Смежные вопросы