删除switch语句中的重复代码

时间:2012-11-29 18:33:49

标签: php

假设我有一个这样的开关语句:

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。如果情况是A,则其值应为1;如果情况为B,则其值应为2,依此类推。除此之外,其余代码保持不变。有没有办法组织这个switch语句来删除重复的代码:

$total = $special + 5

谢谢

5 个答案:

答案 0 :(得分:4)

将重复代码移至切换后。

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;

答案 1 :(得分: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;

答案 2 :(得分:2)

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

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

$total = $special + 5;

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

答案 3 :(得分:2)

以下方式怎么样?

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

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

答案 4 :(得分:1)

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