我们知道,在数学运算中,有 “先乘除后加减” 的运算规则,在我们程序语言中一样有运算符的优先级问题,来决定我们运算的顺序问题,这就是运算符的优先级。
即所谓运算符的优先级,指的是在含有多个逻辑运算符的式子中,到底应该先计算哪一个,后计算哪一个。
PHP 中运算符的运算规则是,优先级高的运算符先执行,优先级低的运算符后执行,同一优先级的运算符按照从左到右的顺序进行。
需要注意的是,PHP 中大部分运算符都是从左向右执行的,只有单目运算符、赋值运算符它们是从右向左执行的。
PHP 运算符中,如果有小括号,即 ()
,则小括号的优先级最高。
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。左 = 从左到右,右 = 从右到左。
结合方向 | 运算符 | 附加信息 |
---|---|---|
无 | clone new | clone 和 new |
左 | [ | array() |
右 | ++ – ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 |
无 | instanceof | 类型 |
右 | ! | 逻辑运算符 |
左 | * / % | 算术运算符 |
左 | + – . | 算术运算符和字符串运算符 |
左 | << >> | 位运算符 |
无 | == != === !== <> | 比较运算符 |
左 | & | 位运算符和引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ? : | 三元运算符 |
右 | = += -= *= /= .= %= &= |= ^= <<= >>= => | 赋值运算符 |
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |
左 | , | 多处用到 |
运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。优先级值越大,表示优先级越高。
乘除优先级比加减高
<?php
echo "嗨客网(www.haicoder.net)<br>";
// 乘除优先级比加减高
$a = 1 + 2 * 3;
$b = 10 - 10 / 5;
echo "a =", $a, ", b =", $b, "<br>";
程序运行后,控制台输出如下:
我们首先定义了 变量 a,其值为表达式 1+2*3
的结果,因为乘法的优先级高于加法,因此这里我们先计算乘法,再计算加法,所以最终结果为 1+6=7
。
接着我们定义变量 b,其值为表达式 10 - 10 / 5
的结果,因为除法的优先级高于减法,因此这里我们先计算除法,再计算减法,所以最终结果为 10-2=8
。
小括号的运算符优先级最高
<?php
echo "嗨客网(www.haicoder.net)<br>";
// 乘除优先级比加减高
$a = (1 + 2) * 3;
$b = (10 - 2) / 4;
echo "a =", $a, ", b =", $b, "<br>";
程序运行后,控制台输出如下:
我们首先定义了变量 a,其值为表达式 (1 + 2) * 3
的结果,因为小括号的运算符优先级最高,因此这里我们先计算小括号里面的加法,再计算乘法,所以最终结果为 3*3=9
。
接着我们定义变量 b,其值为表达式 (10 - 2) / 4
的结果,因为小括号的运算符优先级最高,因此这里我们先计算减法,再计算除法,所以最终结果为 8 / 4 = 2
。
即所谓运算符的优先级,指的是在含有多个逻辑运算符的式子中,到底应该先计算哪一个,后计算哪一个。PHP 中运算符的运算规则是,优先级高的运算符先执行,优先级低的运算符后执行,同一优先级的运算符按照从左到右的顺序进行。
PHP 运算符中,如果有小括号,即 ()
,则小括号的优先级最高。