当U困了,看看Ruby切换后的PHP开关..
更新3(回答)
请参阅下面的问题。这是我的错。行:) 。在PHP中。通过他的动态类型转换(false->(int)false-> 0:这里我得到0
等于我的'>=17_<=20'
)并且在这种特定情况下隐含了构造switch
的行为( switch( ZERO ) { case (true) break; case (false) break;}
)。从强类型语言的角度看,这种行为看起来很奇怪。谢谢大家!!
因此,请帮忙!
我注意到了一个奇怪的行为&#34;检查&#34;一页上的复选框(选择年龄组)。在数据库中,如果用户选中了<16
- 字段age
等于0
(零)。我开始看到&#34;检查&#34;的逻辑。找到下一个:
$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/>';
输出
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 请解释一下,这是什么?!
更新1
不,男,我不疯了!所有必须工作。循环仅用于演示这种奇怪的行为。如果0(零)&lt; 0 16,$case
必须等于<16
。 NO ????????
更新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
答案 0 :(得分:1)
表达式($item>=17) && ($item<=20)
的计算结果为0,因为$item
的值为0。
switch-case语句仅匹配$item
的值与case
值。
因此,您的代码在第一种情况下等同于
switch($item){
case (1):
$case = '<16';
break;
case ( 0):
$case = '>=17_<=20';
break;
case ( 0):
$case = '>=21_<=25';
break;
}
答案 1 :(得分:0)
您有错误,因为“0”的计算结果为false。试试这个:
<?
echo 0==(0>=17) && (0<=20)); //true
?>
这是因为==
的右侧评估为false
且0==false
为true
,因此您在switch语句中遇到了这种情况。
Switch语句将条件与switched
变量(在您的情况下为item
)进行比较,因此它的计算结果为true,然后输入切换条件并在那里将其分解。
答案 2 :(得分:0)
你可能不应该在这里使用开关。使用此:
$range = range(-5,5);
foreach($range as $item){
if ($item<=16)
$case = '<16';
else if ( ($item>=17) && ($item<=20))
$case = '>=17_<=20';
else if( ($item>=21) && ($item<=25))
$case = '>=21_<=25';
echo $item.' '.$case.'<br/>';
}