乙個面試題,關於運算優先順序和遞增遞減

2021-06-08 12:15:50 字數 1014 閱讀 4227

<?php 

$a = 3;

$b = 5;

if ($a = 5 || $b = 7)

echo $a.'----'.$b;

?>

這是那個面試題,我給加上了4個var_dump函式。

這個題目的最後輸出結果: 1 ---- 6為什麼會是這樣呢?

我們先看 if ($a = 5 || $b = 7) { 這裡 ,這裡 $a 被意外賦值 (大家平時不要這麼寫,容易出現問題的)那這個if () 裡面的 $b 是不是意外賦值呢?

答案是, $b 沒有意外賦值,因為 括號裡面 || 後面的$b=7 沒被執行。

因為,if($a =5 ) 這裡 $a = 5 的時候,$a 已經變成 true了, || 或運算後面的就不會被執行。 

符合if條件,直接執行if 裡面的內容。

我們可以看到 第乙個 var_dump($a) 輸出 boolean true ;var_dump($b) 輸出int 5又乙個問題,$a++ 之後,為什麼不是2呢? 

true 為什麼不轉換為整數 1 呢?

手冊上不是寫著:

要明示地將乙個值轉換為 integer,用 (int) 或 (integer) 強制轉換。不過大多數情況下都不需要強制轉換,因為當運算子,函式或流程控制需要乙個 integer 引數時,值會自動轉換。還可以通過函式 intval() 來將乙個值轉換成整型。 

再看下手冊中關於 自增/自減 的內容:

遞增/遞減運算子不影響布林值。遞減 null 值也沒有效果,但是遞增 null 的結果是 1。

納尼!? 這下終於知道了。 

$a = true; 

$a ++; 

echo $a; 

最後還是 輸出1    這時候才自動轉換為 整數 1 輸出。

-------------------------華麗的分割線--------------------------------------

手冊很重要啊! 尤其是那些 注意內容。

乙個面試題,關於運算優先順序和遞增遞減

a 3 b 5 if a 5 b 7 echo a.b 這是那個面試題,我給加上了4個var dump函式。這個題目的最後輸出結果 1 6為什麼會是這樣呢?我們先看 if a 5 b 7 這裡 這裡 a 被意外賦值 大家平時不要這麼寫,容易出現問題的 那這個if 裡面的 b 是不是意外賦值呢?答案是...

面試題 運算子優先順序

include using namespace std int main 首先是運算子優先順序 和 優先順序順序是怎樣的 運算子優先順序和口訣 一共有十五個優先順序 1 2 負號 取變數位址 type 強制型別 sizeof 3 4 5 6 7 8 9 10 11 12 13 14 15 結合性 2...

面試題 關於運算子及優先順序的思考

題目如下 var a var b a a.x a console.log a.x console.log b.x 這道題考查了兩個知識點 1 記憶體空間 2 運算子的優先順序 關於運算子知識點 題目解析 首先變數a指向物件,變數b也指向物件,都指向同乙個物件 接下來由於a.x中的.的優先順序高於 所...