2012-11-29 117 views
-1

比方说,我有一个switch语句是这样的:删除重复的代码

switch($myVar) 
{ 
    case 'A': 
     $special = 1; 
     $total = $special + 5; 
     break; 

    case 'B': 
     $special = 2; 
     $total = $special + 5; 
     break; 

    case 'C': 
     $special = 3; 
     $total = $special + 5; 
     break; 
} 

正如你可以在上面看到,从我的switch语句的情况下,不同的仅仅是变量$special。它的值应该是1,如果情况是A,如果情况是B,则值2,等等。除此之外,其余的代码保持不变。有没有一种方法,我可以组织这个switch语句删除重复的代码:

+3

通过在'switch'块后面移动这一行? –

+0

没有通用的解决方案。对于您的特定情况,您可以将$特殊值保留在数组中,并使用$ specialValues [$ myVar]引用元素。 – zneak

回答

4

开关之后将重复的代码

$total = $special + 5 

谢谢。

switch($myVar) 
{ 
    case 'A': 
     $special = 1; 
     break; 

    case 'B': 
     $special = 2; 
     break; 
    default: 
     $special = 0; //setup a default value to prevent undefined $special errors. 
} 

$total = $special + 5; 
+0

你打败了我 - 我正打算发贴。 – Marvin

1
switch($myVar) { 
    case 'A': 
     $special = 1; 
     break; 
    case 'B': 
     $special = 2; 
     break; 
    default: 
     $special = 0; 
} 
$total = $special + 5; 
+0

无论$ myVar是B还是A,$特殊结果都是1. – zneak

+0

那么错了。第一个案件没有中断。总计只在第二种情况下... – sachleen

+0

对不起,我的错误..编辑 – vlcekmi3

2

为什么不

$special = ('A' == $myVar ? 1 : 2); 
$total = $spacial + 5; 

编辑

由于问题已经改变了,这里是一个更新

$lookup = array('A' => 1, 'B' => 2, 'C' =>3); // You can just initialize this once 
               // maybe a static variable of a class etc. 
$special = $lookup[$myVar]; 
if (!isset($special)) { $special = /* Some default value */ }; // If this is necessary 
$total = $special + 5; 
+0

这假设你希望它是2,如果它不是B,也是。 – sachleen

+0

一个假设它可以是一个或另一个 - 否则该人会添加一个默认值。但我刚刚注意到这个问题已经改变了。我已添加更新。 –

2
switch($myVar) 
{ 
    case 'A': 
     $special = 1; 
     break; 

    case 'B': 
     $special = 2; 
     break; 
} 

$total = $special + 5; 

你可以在切换块后放一次。你不必重复这段代码,因为无论如何,如果你把它放在switch语句之后就会发生。

2

以下方法如何?

$special = array(
    'A' => 1, 
    'B' => 2 
); 

$total = ($special[$myVal] || 0) + 5;