开关案例中的比较,它们有效吗? [英] Comparisons in switch cases, are they valid?

查看:27
本文介绍了开关案例中的比较,它们有效吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

代码如下:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆