本文目录一览:
php中的运算符优先级是什么样的
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
运算符优先级
结合方向
运算符
附加信息
无
clone new
clone 和 new
左
[
array()
右
**
算术运算符
右
++
--
~
(int)
(float)
(string)
(array)
(object)
(bool)
@
类型和递增/递减
无
instanceof
类型
右
!
逻辑运算符
左
*
/
%
算术运算符
左
+
-
.
算术运算符和字符串运算符
左
位运算符
无
=
=
比较运算符
无
==
!=
===
!==
=
比较运算符
左
位运算符和引用
左
^
位运算符
左
|
位运算符
左
逻辑运算符
左
||
逻辑运算符
左
??
比较运算符
左
? :
ternary
right
=
+=
-=
*=
**=
/=
.=
%=
=
|=
^=
=
=
赋值运算符
左
and
逻辑运算符
左
xor
逻辑运算符
左
or
逻辑运算符
Example #1 结合方向
?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
// ternary operator associativity differs from C/C++
$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
?
Operator precedence and associativity only determine how expressions
are grouped, they do not specify an order of evaluation. PHP does not
(in the general case) specify in which order an expression is evaluated
and code that assumes a specific order of evaluation should be avoided,
because the behavior can change between versions of PHP or depending on
the surrounding code.
Example #2 Undefined order of evaluation
?php
$a = 1;
echo $a + $a++; // may print either 2 or 3
$i = 1;
$array[$i] = $i++; // may set either index 1 or 2
?
Note:
尽管 = 比其它大多数的运算符的优先级低,PHP
仍旧允许类似如下的表达式:if (!$a = foo()),在此例中
foo() 的返回值被赋给了 $a。
php逻辑运算符和括号哪个优先级高啊
括号中的优先级更高,括号中运算结束后才会执行逻辑运算
如: 1 == (2-1)
关于php运算符优先级问题
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
运算符优先级
结合方向
运算符
附加信息
无 clone new clone 和 new
左 [ array()
右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 类型和递增/递减
无 instanceof 类型
右 ! 逻辑运算符
左 * / % 算术运算符
左 + - . 算术运算符和字符串运算符
左 位运算符
无 == != === !== 比较运算符
左 位运算符和引用
左 ^ 位运算符
左 | 位运算符
左 逻辑运算符
左 || 逻辑运算符
左 ? : 三元运算符
右 = += -= *= /= .= %= = |= ^= = = = 赋值运算符
左 and 逻辑运算符
左 xor 逻辑运算符
左 or 逻辑运算符
左 , 多处用到
对具有相同优先级的运算符,左结合方向意味着将从左向右求值,右结合方向则反之。对于无结合方向具有相同优先级的运算符,该运算符有可能无法与其自身结合。