PHP運算子優先順序

2021-08-03 17:01:22 字數 1552 閱讀 7343

在我們前面講php邏輯運算子的時候,提到了php運算子的優先順序,所謂的運算子優先順序,指的是在表示式中哪乙個運算子先計算,哪乙個後計算,就好像,表示式 1 + 5 * 3 的結果

是 16 而不是 18 是因為乘號(「*」)的優先順序比加號(「+」)高。如果有需要的話,可以用括號來強制改變優先順序。例如:(1 + 5) * 3 的值為 18。

php的運算子在運算中遵循的規則是:優先順序高的操作先執行,優先順序低的操作後執行,如果同一優先順序,則按照從左到右的順序進行,例如,"-"是左聯的,那麼 1 - 2 - 3 就等同於 (1 -

2) - 3 並且結果是 -4. 另外一方面,"="是右聯的,所以 $a = $b = $c 等同於 $a = ($b = $c)。

1486188938564607.gif括號內的運算子最先執行,括號的使用,哪怕在不是必要的場合下,通過括號的配對來明確標明運算順序,而非靠運算子優先順序和結合性來決定,可以提高**的可讀性。

表按照優先順序從高到低列出了運算子。同一行中的運算子具有相同優先順序,此時它們的結合方向決定求值順序。

結合方向 運算子 附加資訊

無 clone new clone和new<

左 [ array()

右 ** 算術運算子

右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 型別和遞增/遞減

無 instanceof 型別

右 ! 邏輯運算子

左 * / % 算術運算子

左 + - . 算術運算子和字串運算子

左 << >> 位運算子

無 < <= > >= 比較運算子

無 == != === !== <> <=> 比較運算子

左 & 位運算子和引用<

左 ^ 位運算子

左 | 位運算子

左 && 邏輯運算子

左 || 邏輯運算子

左 ?? 比較運算子

左 ? : 三元運算子

右 = += -= *= **= /= .= %= &= |= ^= <<= >>= 賦值運算子

左 and 邏輯運算子

左 xor 邏輯運算子

左 or 邏輯運算子

這麼多的優先級別,如果想都記得很清楚,是不太現實的,也沒有必要,如果寫的表示式很複雜,而且包含了較多的執行符,不放多使用括號,想下面這樣:

<?php

$a and (($b !=$c) or (5*(50-$d)));

?>

這樣就能減少出現邏輯錯誤的可能

有時使用括號可以增強**的可讀性。例如,下面這樣:

<?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

?>

運算子優先順序 PHP運算子優先順序

php運算子優先順序 結合方向 運算子附加資訊 非結合clone new clone 和 new左 array 非結合 遞增 遞減運算子 非結合 int float string array object bool 型別非結合 instanceof 型別右結合 邏輯操作符 左 算術運算子 左 算術運...

PHP運算子優先順序

結合方向 運算子附加資訊 非結合clone newclone 和 new 左 array 非結合 遞增 遞減運算子 非結合 int float string array object bool 型別 非結合instanceof型別 右結合 邏輯操作符 左 算術運算子 左 算術運算子 和 字串運算子 ...

運算子優先順序 C 運算子優先順序

c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...