php運算子優先順序如何理解?
伊谢尔伦
伊谢尔伦 2017-05-16 13:04:40
0
2
543
<?php
$a = 1;
$b = 2;
$c = 3;
$d = 4;
$a = $b !== $c && $d = $b == $c;
var_dump($a,$d);exit;

這裡我理解的是:首先因為!==優先權高於&&,所以先判斷$b !== $c(為true)和$b == $c*(為false),然後進行&&判斷,而&&的話,是先執行左邊,再根據結果執行右邊吧,那麼左邊是$a = true,然後右邊是$d = false,但是為什麼打印$a是false呢,然後我理解這裡其實是:

$a = (true && ($d = false));

這我就不懂了,如果&&並不是指左邊的表達式,而是左邊的$b !== $c的值,那麼為什麼右邊就可以運行$d = false呢,到底這個結合是怎麼結合的呢...
查了很多資料,也問了幾個同事,他們都表示比較難解釋,日常開發不會用,但是我作為一個菜鳥,強迫症實在想弄明白,請大神們賜教如何去理解與判斷PHP的運算子優先順序與執行問題,因為其實開源程式碼裡這種寫法還是比較多的.
其實也類似$a = $b && $b = $c;最後$a為true ,而$b卻是$c的值.(假設abc三個變數都是上面的1,2,3).

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(2)
伊谢尔伦

對於邏輯運算子可以這樣看,在每一個邏輯運算子的兩邊的表達式都將被組合成為一個整體.
對於$b !== $c && $d = $b == $c,對於這個表達式,將會產生兩個組合: $b !== $c && $d = $b == $c,对于这个表达式,将会生成两个组合:
($b !== $c) && ($d = $b == $c)
组合1: ($b !== $c)
组合2: ($d = $b == $c)
所以先执行组合1($b !== $c),结果是true,根据短路运算,需要执行组合2($d = $b == $c),对于这个组合,里面又由于==运算符优先级高,执行==,在赋值,也就是false. 所以最终组合1的结果是true,组合2的结果是false,所以$a=false.
这里解释了可以执行右边的赋值表达式,而不执行左边的赋值表达式,因为左边的赋值表达式优先级低,在执行它之前,需要执行完!==, 再执行&&,之后接着执行==,再执行右边的=,再执行左边的=($b !== $c) && ($d = $b == $c)組合1: ($b !== $c)

組合2: ($d = $b == $c)🎜所以先執行組合1( $b !== $c),結果是true,依短路運算,需要執行組合2($d = $b == $c) ,對於這個組合,裡面又由於==運算子優先級高,執行==,在賦值,也就是false. 所以最終組合1的結果是true,組合2的結果是false,所以$a=false. 🎜🎜這裡解釋了可以執行右邊的賦值表達式,而不執行左邊的賦值表達式,因為左邊的賦值表達式優先級低,在執行它之前,需要執行完!==, 再執行&& code>,之後接著執行==,再執行右邊的=,再執行左邊的=🎜.🎜
淡淡烟草味

我來吐槽的. 你寫的$a = $b !== $c && $d = $b == $c;這一行我至今沒有仔細看,我是複製貼上的,哈哈,666..

大兄弟:
1.這樣的程式碼是書本裡面的;
2.這樣的程式碼項目裡面很少存在,幾乎為0
3.即使有類似的需求,會用()來控制.以達到可讀型更強的目的
4.這樣的需求簡單理解下就行,使用性不強.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板