当U是困了,看看PHP开关红宝石开关以后。
更新3(答案)
请参见下面的问题。它我的错误。好吧:) 。在PHP。随着他的动态类型转换(假 - >(int)的假> 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/>';
OUTPUT
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(零)<16,$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;
}
一切工作正常。它只有当等于零。或者你想说,该输出(的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/>';
}
//输出
-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
表达($item>=17) && ($item<=20)
的计算结果为0,如$item
的值是0的开关情况下的声明将仅仅匹配$item
与case
值的值。所以,你的代码,在第一种情况下,相当于
switch($item){
case (1):
$case = '<16';
break;
case ( 0):
$case = '>=17_<=20';
break;
case ( 0):
$case = '>=21_<=25';
break;
}
你有错误,因为“0”的计算结果为假。尝试这个:
<?
echo 0==(0>=17) && (0<=20)); //true
?>
这是因为==
的右边的计算结果为false
和0==false
是true
所以你打的条件在switch语句。
switch语句比较与switched
可变的条件(在你的情况item
),所以它的计算结果为真实的,并将其输入开关状态,并打破它。
你可能不应该在这里使用一个开关。用这个:
$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/>';
}