2010-09-13 60 views
1

这种方法是否正确?PHP转换问题

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

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

你有没有运行呢?对我来说,它看起来不会起作用,但我可能是错的。 – 2010-09-13 12:41:22

回答

2

该代码是有效的。

+3

..但没有任何意义。 – halfdan 2010-09-13 12:43:05

+0

这是真的。代码有点难以掌握。 – 2010-09-13 12:44:49

+1

我从来没有见过任何人在case语句后使用函数......这是一个很好的例子,为什么人们认为PHP不好。你应该在C# – thecodeassassin 2010-09-13 12:56:39

4

我不能告诉这是否是语法上有效,但它没有任何意义:

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

你比较$_GET['get']is_numeric()的(布尔)结果。这可能是你打算,但我怀疑它。 此外,我不确定是否可以在关键字case之后拥有表达式(即非简单语言结构)。(似乎是有效的,见我的编辑。)


编辑
基础上comments in the PHP manual这可能是有效的。并且由于使用的松散比较switch以上可能实际上反映了你的意图。如果是这种情况,请忽略我的回答。

+0

中尝试这个,但它似乎工作 – 2010-09-13 12:45:15

+0

@moustafa你用1以外的“app”值试过了吗? – 2010-09-13 12:53:34

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语句更可读。

对不起。我没有一个美好的一天。

+1

是的,我知道编码风格是个人喜好的问题....对不起。希望我会很快振作起来。 – James 2010-09-13 12:59:45

+0

Dude我真的很喜欢switch语句,在if语句中继续应用哪些内容?我认为开除开关是因为有人滥用其目的显然是错误的。 – thecodeassassin 2010-09-13 13:27:44

+0

@stephen我刚刚查看了http://uk.php上的代码示例。网/继续,我仍然坚持我原来的观点:“这就是你所说的可读性?”也许有一个目的,一个开关语句可以用于,每次我看到一个我只是认为它可以替换一个if else块并且更具可读性。 – James 2010-09-13 16:15:02

1

你可以考虑使用这样的:(我会亲自取整$ _GET数组,并使用一个foreach循环,但你去那里)

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

parseGet($_GET['show']); 
+0

在那里做的switch语句是什么,否则如果不行? – James 2010-09-13 16:13:36