PHP切换问题

时间:2010-09-13 12:38:19

标签: php

这种方法对吗?

switch ($_GET['get']){ 
  case 'show':
        echo 'show';
  break;

  case is_numeric($_GET['app']):
        echo $_GET['app'];
  break;
}

4 个答案:

答案 0 :(得分:4)

我无法判断这是否在语法上有效但是没有意义:

case is_numeric($_GET['app']):

您将$_GET['get']is_numeric()的(布尔)结果进行比较。这个可能是你想要的,但我对此表示怀疑。 此外,我不确定你是否可以在case关键字之后使用表达式(即非简单语言结构)。(似乎有效,参见我的编辑。)< / p>


修改
根据{{​​3}},它可能有效。由于switch使用的松散比较,上述可能实际上反映了您的意图。如果是这种情况,请忽略我的回答。

答案 1 :(得分:2)

代码有效。

答案 2 :(得分:1)

我将成为角落里那个讽刺的老头说我真的不知道为什么有人在PHP中使用switch语句。真。他们太可怕了。

这是你想要做的吗?

if ($_GET['get'] == "show") {
echo "show";
} else if (is_numeric($_GET['app'])) {
echo $_GET['app'];
}

这简单易懂!

回答我的问题是避免两次计算同一件事。例如,这很糟糕:

if (BigSlowFunctionCall() == 1) { 
... 
} else if (BigSlowFunctionCall() == 2) {
...
}

如果它是2,那么你刚刚调用BigSlowFunctionCall()两次 - 效率不高。但是这就是你如何解决这个问题:

$resultOfBigSlowFunctionCall = BigSlowFunctionCall();
if ($resultOfBigSlowFunctionCall == 1) { 
... 
} else if ($resultOfBigSlowFunctionCall == 2) {
...
}

我认为它仍然比switch语句更具可读性。

对不起。我没有过好日子。

答案 3 :(得分:1)

您可以考虑使用以下内容:(我个人会获取整个$ _GET数组并使用foreach循环,但是你去了)

 function parseGet($getVar)
    {  
       if(is_numeric($getVar)) echo $getVar;
       else
       {
         switch($getVar)
         {
            case "show":
                echo "show";
            break;
         }       
       }        
    }

parseGet($_GET['show']);