В общем случае операции обладают приоритетами, или порядком их вычисления.
Кроме того, одной из характеристик операции является ее ассоциативность, определяющая порядок выполнения операций с одинаковыми приоритетами. Операции могут выполняться слева направо, справа налево, либо порядок их выполнения не имеет значения.
Приоритеты и ассоциативность операций в РНР представлены в таблице 7.
В верхней части таблицы указаны операции с наименьшим приоритетом, по мере продвижения сверху вниз приоритеты операций возрастают.
Таблица 7. Приоритеты операций в РНР
Ассоциативность | Операции |
слева направо | ` |
слева направо | or |
слева направо | xor |
слева направо | and |
справа налево | |
слева направо | = += -= *= /= .= %= &= |= ^= ~= <<= >>= |
слева направо | ? : |
слева направо | | | |
слева направо | && |
слева направо | | |
слева направо | ^ |
слева направо | & |
неприемлема | == != === !== |
неприемлема | < <= > >= |
слева направо | << >> |
слева направо | + - . |
слева направо | * / % |
справа налево | ! ~ ++ -- (int) (float) (string) (array) (object) @ |
справа налево | [ ] |
неприемлема | new |
неприемлема | ( ) |
Обратите внимание, что наивысшим приоритетом обладает операция, которую мы еще не рассматривали: хорошо знакомые круглые скобки. Они повышают приоритеты любых заключенных в них операций. Именно с их помощью при необходимости можно изменить порядок выполнения операций, определенный их приоритетами.
Вспомним фрагмент из последнего примера:
$totalamount = $totalamount * (1 + $ndc);
Если записать следующим образом:
$totalamount = $totalamount * 1 + $ndc;
то операция умножения, имеющая более высокий приоритет по сравнению с операцией сложения, выполнялась бы первой, что привело бы к неверному результату. С помощью круглых скобок можно добиться, чтобы сначала выполнялось подвыражение 1 + $ndc.
В выражении можно использовать любой набор пар круглых скобок. При этом первым будет вычисляться выражение, заключенное в самые внутренние скобки.
Также следует отметить еще одну операцию, присутствующую в таблице, которая еще не рассматривалась: языковую конструкцию print, представляющая собой эквивалент echo. Обе конструкции генерируют вывод в окно веб-браузера.
В основном мы будем использовать в наших примерах конструкцию echo, тем не менее можно применять и print, если кому-то эта конструкция кажется более читабельной. Реально ни print, ни echo не являются функциями, однако обе они вызываются подобно функциям, с передачей им параметров в круглых скобках. Обе конструкции можно также рассматривать как операции — вы просто помещаете необходимую строку после ключевого слова print или echo.
Вызов print как функции приводит к возврату ею значения (1). Данная возможность может оказаться полезной, если необходимо генерировать вывод внутри более сложного выражения, тем не менее, учитывайте, что print существенно медленнее echo.