Operator precedence specifies how "tightly" two expressions are bound. For example, the expression 1 + 5 * 3 evaluates to 16 instead of 18 because the multiplication sign ("*") has higher precedence than the plus sign ("+"). Parentheses can be used to force a priority change if necessary. For example: (1 + 5) * 3 has the value 18.
If operators have the same precedence, their associative direction determines whether evaluation should be from right to left or from left to right - see the example below.
The following table lists the operators in order of precedence from high to low. Operators in the same line have the same precedence, and the direction in which they are combined determines the order of evaluation.
Operator precedence
Combining direction left [ array() right ++ -- ~ (int) (float ) (string) (array) (object) (bool) @ Type and increment/decrement
None instanceof Type
right ! Logical operator
left * / % Arithmetic operator
left + - . arithmetic operators and String operators
left > Bit operators
None == != === !== Comparison operators
left & & Bitwise operators and references
left ^ Bit operator
left | Bit bit operator
left && Logical operator
left || Logical operator
left ? : Ternary operator
right = += -= *= /= .= % = &= |= ^= >= => Assignment operator
left and Logical operator
left xor Logical operator
left or Logical operator
left , Many places When using
for operators with the same precedence, the left associative direction means that the evaluation will be from left to right, and the right associative direction means the opposite. It is possible that an operator with the same precedence without associative direction cannot be combined with itself. For example, in PHP 1 1 is an illegal statement, but 1
Example #1 In conjunction with direction
<?php $a = 3 * 3 % 5; // (3 * 3) % 5 = 4 $a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2 $a = 1; $b = 2; $a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5 // mixing ++ and + produces undefined behavior $a = 1; echo ++$a + $a++; // may print 4 or 5 ?>
Using parentheses often enhances the readability of your code, even when they are not strictly needed.
Note:
Although = has lower precedence than most other operators, PHP still allows expressions like the following: if (!$a = foo()), in this case the return value of foo() is assigned to $a.
Example:
Run the following command on the command line, and the printed result is false: