有人可以解釋我爲什麼這樣的:類型轉換爲布爾
var_dump((bool) 1==2);
回報
bool(true)
但
var_dump(1==2);
回報
bool(false)
當然,第二次返回是正確的,但爲什麼在第一次php返回一個意外的值?
有人可以解釋我爲什麼這樣的:類型轉換爲布爾
var_dump((bool) 1==2);
回報
bool(true)
但
var_dump(1==2);
回報
bool(false)
當然,第二次返回是正確的,但爲什麼在第一次php返回一個意外的值?
它實際上並不像看起來那麼奇怪。 (bool)
has higher precedence than ==
,所以這樣的:
var_dump((bool) 1==2);
是相同的:
var_dump( ((bool) 1) == 2);
或本:
var_dump(true == 2);
由於type juggling,該2
也基本上被轉換爲bool
(因爲這是一個「鬆散的比較」),所以它等同於:
var_dump(true == true);
或本:
var_dump(true);
因爲在第一個例子中,演員發生在比較之前。所以,就好像你寫
((bool) 1)==2
這相當於
true == 2
這是通過轉換2
到true
和比較,最終產生true
評估。
要見你需要添加括號預期的結果,使順序明確:
var_dump((bool)(1==2));
+1感謝您的快速響應 –
我用這樣的方式:
!!0 (false)
!!1 (true)
正如標題要求輸入的那樣,這個答案是正確的,幾乎可以用於任何語言。這種結構對於像JavaScript這樣的語言來說是非常好的,你需要真正的「真」或「假」,但不能保持原始值。順便說一句,用(bool)進行類型轉換要快一點。 –
你寫的聲明((布爾)1 == 2)的方式將永遠,因爲它會返回true總是執行下面的流程代碼:
首先,它會執行
(bool)1
和(bool)1將返回true。
現在,因爲(布爾)1是在第二個步驟真正的語句會像
true ==2
因爲如果我們將強制轉換2到布爾它將返回true,在最後的狀態你的發言就會像
true == true
這顯然會返回true。 同樣的事情,我已經在我的帖子PHP Type casting中解釋過。
操作順序讓你在這裏... – Brad