PHP基礎(chǔ)之運(yùn)算符1——運(yùn)算符優(yōu)先級(jí)
運(yùn)算符優(yōu)先級(jí)指定了兩個(gè)表達(dá)式綁定得有多“緊密”。例如,表達(dá)式 1 + 5 * 3 的結(jié)果是 16 而不是 18 是因?yàn)槌颂?hào)(“*”)的優(yōu)先級(jí)比加號(hào)(“+”)高。必要時(shí)可以用括號(hào)來(lái)強(qiáng)制改變優(yōu)先級(jí)。例如:(1 + 5) * 3 的值為 18。
如果運(yùn)算符優(yōu)先級(jí)相同,其結(jié)合方向決定著應(yīng)該從右向左求值,還是從左向右求值——見下例。
下表按照優(yōu)先級(jí)從高到低列出了運(yùn)算符。同一行中的運(yùn)算符具有相同優(yōu)先級(jí),此時(shí)它們的結(jié)合方向決定求值順序。
運(yùn)算符優(yōu)先級(jí)結(jié)合方向運(yùn)算符附加信息無(wú)clone newclone 和 new左[array()右++ -- ~ (int) (float) (string) (array) (object) (bool) @類型和遞增/遞減無(wú)instanceof類型右!邏輯運(yùn)算符左* / %算術(shù)運(yùn)算符左+ - .算術(shù)運(yùn)算符和字符串運(yùn)算符左<< >>位運(yùn)算符無(wú)== != === !== <>比較運(yùn)算符左&位運(yùn)算符和引用左^位運(yùn)算符左|位運(yùn)算符左&&邏輯運(yùn)算符左||邏輯運(yùn)算符左? :三元運(yùn)算符右= += -= *= /= .= %= &= |= ^= <<= >>= =>賦值運(yùn)算符左and邏輯運(yùn)算符左xor邏輯運(yùn)算符左or邏輯運(yùn)算符左,多處用到對(duì)具有相同優(yōu)先級(jí)的運(yùn)算符,左結(jié)合方向意味著將從左向右求值,右結(jié)合方向則反之。對(duì)于無(wú)結(jié)合方向具有相同優(yōu)先級(jí)的運(yùn)算符,該運(yùn)算符有可能無(wú)法與其自身結(jié)合。舉例說,在 PHP 中 1 < 2 > 1 是一個(gè)非法語(yǔ)句,而 1 <= 1 == 1 則不是。因?yàn)?T_IS_EQUAL 運(yùn)算符的優(yōu)先級(jí)比 T_IS_SMALLER_OR_EQUAL 的運(yùn)算符要低。
Example #1 結(jié)合方向
<?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// mixing ++ and + produces undefined behavior$a = 1;echo ++$a + $a++; // may print 4 or 5?>
使用括號(hào),即使在并不嚴(yán)格需要時(shí),通常都可以增強(qiáng)代碼的可讀性。
Note:
盡管 = 比其它大多數(shù)的運(yùn)算符的優(yōu)先級(jí)低,PHP 仍舊允許類似如下的表達(dá)式:if (!$a = foo()),在此例中 foo() 的返回值被賦給了 $a。
示例:
在命令行運(yùn)行如下命令,打印結(jié)果為false:
相關(guān)文章:
1. 不要在HTML中濫用div2. HTTP協(xié)議常用的請(qǐng)求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))3. Electron調(diào)用外接攝像頭并拍照上傳實(shí)現(xiàn)詳解4. React優(yōu)雅的封裝SvgIcon組件示例5. HTML5實(shí)戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)6. CSS百分比padding制作圖片自適應(yīng)布局7. TypeScript實(shí)現(xiàn)十大排序算法之歸并排序示例詳解8. vue前端RSA加密java后端解密的方法實(shí)現(xiàn)9. 深入了解React中的合成事件10. CSS清除浮動(dòng)方法匯總
