The precedence of an operator specifies how “tightly” it binds two expressions together. Lets play with few of them
- ‘[‘ is left associative and has higher precedence than assignment operator ‘=’
function one($str)
{
echo "$str";
return 1;
}
$a = array(1,2);
$a[one("A")] = $a[one("B")] = 1; // outputs AB - Assignment Operators are right associative
function output(& $b)
{
echo( "b value is: ".$b );
return $b;
}
$a = 2;
$b = 5;
echo ($a = $b = 1);
$a = 2;
$b = 5;
echo ( "a value is: ".$a = output($b) );
?>
Output is:
1
b value is: 5
a value is: 5
- Comparison Operator always returns TRUE/FALSE
$b = 5;
$a = ( ( ++$b ) > 5 ); // Pre-increment test
echo (int)$a; // Output 1
$b = 5;
$a = ( ( $b++ ) > 5 ); // Post-increment test
echo (int)$a; // Output 0
- assignment operator has higher precedence than bitwise operator
( 9 & 8 == 8 ) ? 'true':'false'; //same as 9 & ( 8 == 8 ) which is true
( 8 & 8 == 8 ) ? 'true':'false'; //same as 8 & ( 8 == 8 ) which is false
- Logical Operator Precedence : and, or, nor, !, &&, ||
$a && $b || $c; // equivalent to(a and b) or c
$a AND $b || $c; // equivalent to
a and (b or c)
again
$a = $b && $c; // equivalent to $a = ($b && $c
)
$a = $b AND $c; //equivalent to ($a =
$b) && $c
- The ternary operator is a statement, and that it doesn’t evaluate to a variable, but to the result of a statement
echo (true?'true':false?'t':'f'); // equivalent to echo ((true ? 'true' : 'false') ? 't' : 'f');
Reference : PHP Manual