剛看PHP手冊中 Boolean 布爾類型 數(shù)據(jù)類型時,看到了評論中一個關于運算符優(yōu)先級的問題,以前也講過在實際項目中不要出現(xiàn)這些需要人為判斷運算符優(yōu)先級的代碼,都應該使用括號來規(guī)避這個問題的出現(xiàn).
周五一朋友來著一段代碼來問我,說他看不懂這段代碼,覺得這段代碼有問題,代碼類似:
- $array1 = array(1, 2);
- $array2 = array(3, 4);
- $result = emptyempty($array1) == 3 ? $array1 : $array2;
我一看應該是運算符優(yōu)先級的問題.按理說,這些運算符優(yōu)先級的問題是不應該讓它出現(xiàn)在項目代碼中的,只能讓它在面試問題中,程序員應該在書寫代碼過程中使用括號來避免這種不確定問題的出現(xiàn),項目中的代碼應該是那種我們一看就知道結果的,而不是需要我們費勁腦子才能知道結果的,這種優(yōu)先級代碼的結果有時候并不是我們相信的那樣,看看下面的例子:
- <?php
- if ($a = 100 && $b = 200) {
- var_dump($a, $b);
- }
上面代碼也許你會認為是:
- <?php
- if ($a = (100 && $b) = 200) {
- var_dump($a, $b);
- }
但是實際上不是這樣的,實際結果是:
- <?php
- if ($a = (100 && $b = 200)) {
- var_dump($a, $b);
- }
至于為什么會這樣?那是因為PHP并不完全遵守優(yōu)先級的定義,PHP手冊上中有說明
Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
代碼如下:
- <?php
- $x=TRUE;
- $y=FALSE;
- $z=$y OR $x; ?>
- 代碼2:
- <?php
- $x=TRUE;
- $y=FALSE;
- $z=$y || $x;
- ?>
這種代碼在實際項目中是不應該出現(xiàn)的,都應該用下面的代碼替換:
$z = ($y OR $x);$z = ($y || $x);
新聞熱點
疑難解答