運算子優先順序(priority of operator)

考考各位,1+2*3 = ?,相信對大家來說很簡單,正確答案是7

但是為什麼答案是7不是9呢?,這是因為在我們的計算習慣中,要「先計算乘除,後計算加減」

也就是說乘除的計算優先順序比加減來得高

同樣的,在PHP中,各個運算子在計算時也有優先順序之分

如同我們習慣的計算方式,PHP中也可以使用括號()來提高計算的優先順序

Ex.(1+2)*3 = 9


下面列出PHP中的運算子的運算優先順序

由運算優先權最高(最上面)排至最低(最下面)

結合方向 運算子 說明
clone new 物件操作
[ 新增array()
++ -- ~ - (int) (float) (string) (array) (object) (bool) @ 遞增遞減與強制轉型
instanceof
!
* / %
+ - .
<<>>
<<= >>= <>
== != === !==
&
^
\
&&
\ \
? : 三元運算子
= += -= *= /= .= %= &= \ = ^= <<= >>= =>
and
xor
or
,

這邊跟大家講解一下結合方向的意義

舉例來說12/6/2,正確的運算結果是1,而不是4

這是因為除法是由左至右計算,先計算左邊再計算右邊

所以運算的方式是(12/6)/2,而不是12/(6/2)

這時我們就稱除法的結合方向是左往右,從左邊開始,簡稱為「左」

所以如果碰到優先順序相同的運算子,則依據運算子的結合方向決定先做左或右邊。

來個結合方向的範例

<?php
    // 結合方向: 左
    var_dump(7 * 3 / 3);  // int(7), => 21 / 3
    var_dump(7 / 3 * 3);  // float(7), => 2.3333.. * 3 先轉為float

    // 結合方向: 右
    $a = 1;
    $b = 2;
    $a = $b += 3;         // $b = 5, $a = 5
?>

但凡事總有例外,有時候指派運算符=雖然運算排序較後,但仍然會被先進行運算

<?php
    $a = false;
    $b = true;
    var_dump(!$a = $b);  // bool(false)
?>

results matching ""

    No results matching ""