2016-07-28 87 views
1

望見Toptal這個問題,並得到了一個有點糊塗:

$v = 1; 
$m = 2; 
$l = 3; 

if ($l > $m > $v) { 
    echo "yes"; 
} 
else { 
    echo "no"; 
} 

我知道爲什麼,答案是「不」,但他們的理由是有點混亂對我說:

首先,$l > $m會被評估,其產生布爾值1true。將該布爾值與整數值1(即,bool(1) > $v)進行比較將導致NULL,因此輸出將是「否」。

爲什麼bool(1) > $v成爲null而不是undefinedfalse

+2

它返回一個布爾值,不爲空,https://3v4l.org/QqJe5 – Rizier123

+0

@ Rizier123你是說 「布爾(1)> $ V」 將返回「false」而不是NULL?那麼他們對Toptal的推理是不是正確的? –

+2

僅僅因爲有人說了些什麼並不意味着這是真的...... – FirstOne

回答

7

它沒有。 true > 1 is false(因爲它們相反「相等」)。

此外,the entire program will not run,因爲「雙重條件」是一個解析錯誤。

您閱讀的答案是錯誤

這就是爲什麼你不應該從互聯網上的隨機陌生人的意見。包括我。 ;)

+0

謝謝。這就是我的想法,但我只是想仔細檢查:D! –

+0

@PeteKang:不客氣。 –

+0

@PeteKang參見:http://stackoverflow.com/q/80646/3933332並知道'<'/'>'做了一個鬆散的比較。 – Rizier123

1

只是爲了記錄

<?php 

$v = 1; 
$m = 2; 
$l = 3; 

var_export($l > $m); // true 
var_export($m > $v); // true 
var_export($l > ($m > $v)); // false: (3 > true) = false 
var_export(($l > $m) > $v); // false: (true > 1) = false 
var_export($l > $m > $v); // parse error 
相關問題