5
switch ($foo)
    {
        case 3 || 5:
           bar();
        break;

        case 2:
          apple();
        break;
    }

在上面的代码中,第一个 switch 语句是否有效?bar()如果值为$foo3 或 5 ,我希望它调用该函数

4

5 回答 5

24

您应该利用 switch 语句的失败:

switch ($foo)
    {
        case 3:
        case 5:
           bar();
        break;

        case 2:
          apple();
        break;
    }

PHP 手册页有一些类似的示例。

于 2009-11-01T23:54:17.977 回答
6

我认为你需要的是:

switch ($foo)
{
    case 3:
    case 5:
       bar();
    break;

    case 2:
      apple();
    break;
}

有趣的是,我听说 Perl 正在(或者现在可能已经)引入了这种语法,大致如下:

if ($a == 3 || 5)

我不是那种语法的忠实拥护者,因为我不得不编写相当多的词法解析器,并且相信语言应该尽可能明确。if但是,Perl 已经解决了所有这些or问题

于 2009-11-01T23:54:21.037 回答
5

switch相反,请使用语句的主要优点之一:

switch($foo) {
    case 3:
    case 5:
        bar();
        break;

    case 2:
        apple();
        break;
}
于 2009-11-01T23:54:20.157 回答
1

是的,我认为你所拥有的相当于:

    <?php

    $foo = 5000 ;

    开关($foo)
    {
      case true :    // Gzipp:进行 '==' 风格的比较
        echo '第一个' ; // 在 $foo 和 case 中的值之间
        休息; // 所以对于“真实”的 $foo 值
                           // 你总是得到这个。

      案例2:
        echo '第二个';
        休息;

      默认:
        回声“都不是”;
        休息;
    }

    ?>
于 2009-11-01T23:58:41.573 回答
0

不,如果你写了case 3 || 5:,那你还不如直接写case True:,这肯定不是你想要的。但是,您可以将 case 语句直接放在彼此下方:

开关 ($foo)
    {
        案例3:
        案例5:
           酒吧();
        休息;

        案例2:
          苹果();
        休息;
    }
于 2009-11-01T23:56:14.133 回答