【发布时间】:2014-03-27 21:42:41
【问题描述】:
当你困了,看看Ruby切换后的PHP切换..
更新 3(答案)
见下面的问题。是我的错。好的:) 。在 PHP 中。使用他的动态类型转换( false->(int)false->0: 在这里我得到 0 等于 my'>=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/>';
输出
0 >=17_<=20 // HOW???!!!!!!!!!!!!!!!!
测试
$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/>';
}
// 输出
-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(零)$case 必须等于 <16。没有????????
更新 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;
}
一切正常。只有当等于零。或者你想说,那 OUTPUT(Test2) - 它的正常行为???谢谢。
测试 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/>';
}
// 输出
-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语句一样,而不是使用开关。 -
你到底为什么要使用开关???因为你看到你所看到的3v4l.org/Z2EjY。并不奇怪。停止滥用 switch 语句,你就没有这个问题了。
-
你把
if和switch混在一起 -
更新问题,请看
-
您的更新仍然显示您不了解如何使用 swtich/case。将它们切换为
if语句,就像我在回答中所做的那样。
标签: php switch-statement