你好,我有下面的代碼,它讓我困惑。這種情況如何?類型爲string>的PHP 0,然後類型爲string的0等於true?
<?php
$concept = '0';
switch ($concept) {
case ($concept > '0'):
$score = 'Y';
break;
}
?>
你好,我有下面的代碼,它讓我困惑。這種情況如何?類型爲string>的PHP 0,然後類型爲string的0等於true?
<?php
$concept = '0';
switch ($concept) {
case ($concept > '0'):
$score = 'Y';
break;
}
?>
從switch
文檔:
注: 注意,切換/情況下確實鬆散比較。
Check the falsy-ness for '0'
,這很糟糕,我知道。您的案例評估結果爲false
,正如您可以在鏈接的TBL ('0' == false) === true
中看到的那樣。
我想你switch
聲明更改爲:
switch(true)
{
case ($concept >'0'):
echo 'Impossible';
break;
}
此外,像文檔說:switch
是執行寬鬆比較迴路狀結構。你不能自己選擇比較操作符。如果您想檢查的$concept
值對案件的數組,你必須寫:
switch($concept)
{
case '0': echo 'a zero string'; break;
case '1': echo 'a 1 concept'; break;
}
您的交換機是在$概念;你的情況是($ concept>'0'),它的結果爲FALSE,所以你的意思是case FALSE:
;該FALSE與開關條件($概念)進行比較,該開關條件爲'0';寬鬆輸入比較'0'和FALSE,其值爲TRUE;因此該案件得到滿足。
我不是你真正理解switch語句實際上做了什麼;但它不僅僅是一個替代if語句
因此,另一種方法是使用if語句? –
在這種情況下,if語句會簡單很多,並且代碼在邏輯上更具可讀性 –
感謝Mark對您的回答,我已經提出了這個意見,但是我還是將其他答案作爲我需要的。抱歉。 –
它的工作原理是這樣的。
<?php
$concept = '0'; // 1. This is a string
switch ($concept) { // 3. boolean FALSE is compared to $concept,
// which forces $concept to be cast to boolean,
// thus the comparison is FALSE == FALSE which equals TRUE
case ($concept > '0'): // 2. ($concept > '0') evaluates to boolean FALSE
$score = 'Y';
break;
}
請注意我在評論中添加的數字,以顯示評估事物的順序。 (非常簡單)。
你能做些什麼來避免類型的問題是這樣的:
<?php
$concept = '0';
switch (TRUE) {
case ($concept > '0'):
$score = 'Y';
break;
}
這樣做是所有的情況下,條件比較爲TRUE,而更象你所期望的。請注意,交換機的這種用法有點不合常規,但可以避免在PHP中出現一些類型轉換問題。
它比較$概念與概念$的結果> '0'
$concept = '0' // '0' == false
$concept > '0' // '0'>'0' == false
您衆所周知聲明等於:
switch (false){
case (false):
$score = 'Y';
break;
}
謝謝Elias for你的解決方案,它工作正常。 –