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

$total = $special + 5

谢谢

4

5 回答 5

3

将重复的代码移到切换之后。

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;
于 2012-11-29T18:35:56.917 回答
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;
于 2012-11-29T18:36:34.587 回答
2

下面的方法怎么样?

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

$total = ($special[$myVal] || 0) + 5;
于 2012-11-29T18:42:15.857 回答
2
switch($myVar)
{
    case 'A':
        $special = 1;
        break;

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

$total = $special + 5;

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

于 2012-11-29T18:36:35.310 回答
1
switch($myVar) {
    case 'A':
        $special = 1;
        break;
    case 'B':
        $special = 2;
        break;
    default:
        $special = 0;
}
$total = $special + 5;
于 2012-11-29T18:36:01.233 回答