Приоритет и ассоциативность

В общем случае операции обладают приоритетами, или порядком их вычисления.

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

Приоритеты и ассоциативность операций в РНР представлены в табл. 1.7.

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

Приоритет и ассоциативность

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

Вспомним фрагмент из последнего примера:

$totalamount = $totalamount * (1 + $taxrate);

Если записать следующим образом:

$totalamount = $totalamount * 1 + $taxrate;

то операция умножения, имеющая более высокий приоритет по сравнению с операцией сложения, выполнялась бы первой, что привело бы к неверному результату. С помощью круглых скобок можно добиться, чтобы вначале вычислялось подвыражение 1 + $taxrate.

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

Также следует отметить еще одну операцию, присутствующую в табл. 1.7, которая еще не рассматривалась: языковую конструкцию print, представляющую собой эквивалент echo. Обе конструкции генерируют вывод в окно браузера.

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

Вызов print как функции приводит к возврату ею значения (1). Данная возможность может оказаться полезной, если необходимо генерировать вывод внутри более сложного выражения, тем не менее, учитывайте, что print существенно медленнее echo.