代码之家  ›  专栏  ›  技术社区  ›  Ali

是否可以在php开关中使用?

  •  5
  • Ali  · 技术社区  · 15 年前
    switch ($foo)
        {
            case 3 || 5:
               bar();
            break;
    
            case 2:
              apple();
            break;
        }
    

    在上面的代码中,第一个switch语句有效吗?我要它调用函数 bar() 如果值 $foo 是3还是5

    5 回复  |  直到 15 年前
        1
  •  24
  •   shsteimer    15 年前

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

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

    这个 PHP man page 有一些这样的例子。

        2
  •  6
  •   paxdiablo    15 年前

    我认为你需要的是:

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

    有趣的是,我听说Perl正在(甚至可能现在已经)引入这种语法,其内容如下:

    if ($a == 3 || 5)
    

    我不是 大的 喜欢这种语法,因为我不得不写很多词汇解析器,并且相信语言应该尽可能的清晰。但是,Perl以前用那些可怕的尾部解决了所有这些问题。 if S和 or 所以我怀疑这不会有什么问题。

        3
  •  5
  •   Jed Smith    15 年前

    相反,使用 switch 声明:

    switch($foo) {
        case 3:
        case 5:
            bar();
            break;
    
        case 2:
            apple();
            break;
    }
    
        4
  •  1
  •   bobobobo    15 年前

    是的,我认为你得到的相当于:

        <?php
    
        $foo = 5000 ;
    
        switch( $foo )
        {
          case true :   // Gzipp:  an '=='-style comparison is made
            echo 'first one' ; // between $foo and the value in the case
            break;             // so for values of $foo that are "truthy"
                               // you get this one all the time.
    
          case 2:
            echo 'second one';
            break;
    
          default:
            echo 'neither' ;
            break;
        }
    
        ?>
    
        5
  •  0
  •   too much php    15 年前

    不,如果你写的话 case 3 || 5: 那么你最好还是写 case True: 这当然不是你想要的。但是,您可以将case语句直接放在彼此的下面:

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