<?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中的.的優先順序高於 所...