當睏倦看看PHP切換開關紅寶石後..PHP開關的麻煩
更新3(答案)以下
見問題。這是我的錯誤。好吧:) 。在PHP中。用他的動態類型轉換(false - >(int)false-> 0:這裏我得到0
等於我的'>=17_<=20'
)以及構造switch
在這個特定情況下(switch(ZERO) { case (true) break; case (false) break;}
)的隱含行爲。從強類型語言的角度來看,這種行爲看起來很奇怪。感謝所有!
所以,請幫忙! 我注意到一個頁面上的「選中」複選框的奇怪行爲(選擇年齡段)。在數據庫中,如果用戶選中<16
- 字段age
等於0
(零)。我開始看到「檢查」的邏輯。發現下一個:
$item = 0; //!!!!!!!
switch($item){
case ($item<=16):
$case = '<16';
break;
case (($item>=17) && ($item<=20)):
$case = '>=17_<=20';
break;
case (($item>=21) && ($item<=25)):
$case = '>=21_<=25';
break;
}
echo $item.' '.$case.'<br/>';
OUTPUT
0 >=17_<=20 // HOW???!!!!!!!!!!!!!!!!
TEST
$range = range(-5,5);
foreach($range as $item){
switch($item){
case ($item<=16):
$case = '<16';
break;
case (($item>=17) && ($item<=20)):
$case = '>=17_<=20';
break;
case (($item>=21) && ($item<=25)):
$case = '>=21_<=25';
break;
}
echo $item.' '.$case.'<br/>';
}
// OUTPUT
-5 <16
-4 <16
-3 <16
-2 <16
-1 <16
0 >=17_<=20 // WHY???????!!!!!!!!!!!!!!
1 <16
2 <16
3 <16
4 <16
5 <16
http://3v4l.org/jbfng 請說明一下,這是什麼?!
UPDATE 1 不,男人,我不瘋狂!所有必須工作。循環僅用於演示這種奇怪的行爲。如果0(零)< 16,$case
務必等於<16
。沒有????????
UPDATE 2 老實說,我不懂缺點。好。
$item = 0;
if (($item>=17) && ($item<=20)){ // false
// never for <17 & >20
}
item = 0;
$checking = (($item>=17) && ($item<=20)); // false
if ($checkig){
// never for <17 & >20
}
item = 0;
$checkig = (($item>=17) && ($item<=20)) ? true : false; // false
if ($checkig){
// never for <17 & >20
}
$item = 0;
switch($item){
case (($item>=17) && ($item<=20)): // false
// never for <17 & >20
break;
}
一切工作正常。它只有當EQUALS ZERO。或者你想說,那個OUTPUT(Test2) - 它的正常行爲?謝謝。
TEST 2
$range = range(-5,47);
//var_dump($range);
foreach($range as $item){
switch($item){
case ($item<=16):
$case = '<16';
break;
case (($item>=17) && ($item<=20)):
$case = '>=17_<=20';
break;
case (($item>=21) && ($item<=25)):
$case = '>=21_<=25';
break;
case (($item>=26) && ($item<=35)):
$case = '>=26_<=35';
break;
case (($item>=36) && ($item<=45)):
$case = '>=36_<=45';
break;
case (($item>=46)):
$case = '>=46';
break;
}
echo $item.' '.$case.'<br/>';
}
// OUTPUT
-5 <16
-4 <16
-3 <16
-2 <16
-1 <16
0 >=17_<=20 // WHY ?
1 <16
2 <16
3 <16
4 <16
5 <16
6 <16
7 <16
8 <16
9 <16
10 <16
11 <16
12 <16
13 <16
14 <16
15 <16
16 <16
17 >=17_<=20
18 >=17_<=20
19 >=17_<=20
20 >=17_<=20
21 >=21_<=25
22 >=21_<=25
23 >=21_<=25
24 >=21_<=25
25 >=21_<=25
26 >=26_<=35
27 >=26_<=35
28 >=26_<=35
29 >=26_<=35
30 >=26_<=35
31 >=26_<=35
32 >=26_<=35
33 >=26_<=35
34 >=26_<=35
35 >=26_<=35
36 >=36_<=45
37 >=36_<=45
38 >=36_<=45
39 >=36_<=45
40 >=36_<=45
41 >=36_<=45
42 >=36_<=45
43 >=36_<=45
44 >=36_<=45
45 >=36_<=45
46 >=46
47 >=46
您的開關/案例邏輯沒有多大意義。您正在使用每個'case'語句,如'if'語句,而不是使用該開關。 –
爲什麼你在使用開關???因爲你看到你在看什麼http://3v4l.org/Z2EjY。不奇怪。停止濫用switch語句,並且您沒有這個問題。 – PeeHaa
你混合'如果'與'開關' – Peter