这是代码:
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
大于$_REQUEST['c']
,第三个$cbase
也会始终提供正确的输出,而default
则应该落在{{1}}:|
答案 0 :(得分:2)
是的,这是有效的。使用switch(TRUE)
可以在switch语句中进行严格的比较。检查这个例子:
非类型安全:
$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;
}