开关案例中的比较,它们有效吗? [英] Comparisons in switch cases, are they valid?
本文介绍了开关案例中的比较,它们有效吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
代码如下:
switch (true)
{
case (isset($_REQUEST['a']) && is_numeric($_REQUEST['a']) && ($_REQUEST['a'] > 0)):
case (isset($_REQUEST['b']) && is_string($_REQUEST['b']) && in_array($_REQUEST['b'], $barray)):
case (isset($_REQUEST['c']) && is_numeric($_REQUEST['c']) && ($_REQUEST['c'] > 0) && ($_REQUEST['c'] <= $cbase)):
try { echo "Foo"; }
catch(Exception $e) { echo $e->getMessage(); }
break;
default:
echo "Bar"; break;
}
我想知道这些是否允许用于 switch case?很快我必须使用 switch
因为很多比较并且愿意尝试它.在这种情况下,第三个 case
总是给我正确的输出,即使 $_REQUEST['c']
大于 $cbase
,而应该下降到 default
:|
I'm wondering if these are allowed for use in switch cases?
Very soon I must use switch
because of many comparisons and willing to try it. In this case 3rd case
gives me always correct output, even when $_REQUEST['c']
is bigger than $cbase
, while should fall to default
:|
推荐答案
是的,这是有效的.使用 switch(TRUE)
使您能够在 switch 语句中进行严格的比较.检查这个例子:
Yes this is valid. Using switch(TRUE)
enables you to have strict comparisons in a switch statement. check this examples:
不是类型安全的:
$a = '1';
switch($a) {
case 1 :
// do something (will get executed)
break;
case '1' :
// do something:
break;
}
更好:
$a = '1';
switch(TRUE) {
case $a === 1 :
// do something; (will not get executed)
break;
case $a === '1' :
// .. do something;
break;
}
<小时>
此外,这种用法允许更复杂的 case
语句,如下所示:
switch(TRUE) {
case strpos($input, 'a') === 0 :
// do something
break;
case strpos($input, 'b') === 0 :
// do something
break;
}
这篇关于开关案例中的比较,它们有效吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文