在这种情况下如何使我的代码更清洁(切换案例/ if else)

时间:2015-11-10 03:05:56

标签: php coding-style

我正在使用PHP设计一个小型网页游戏。
游戏中有几个按钮,当玩家点击时会发出ajax请求。

当我需要对每个按钮做出不同的决定时,我写下以下代码......

    if ($button != 'A') {
        if ($button == 'B') {
            if (!$this->functionB()) {
                return $this->returnJson(<some message>);
            }
        } elseif ($button == 'C') {
            if (!$this->functionC()) {
                return $this->returnJson(<some message>);
            }
        } else {  // other buttons go here
            if (!$this->myFunction($button)) {
                return $this->returnJson(<some message>);
            }
        }
    }

    // other logic...

    return $this->returnJson(<success message>);

当玩家点击按钮A时,他绝对会得到成功的消息 当玩家点击按钮B时,如果他没有通过functionB()传递确定,他将收到错误信息。如果他通过,他将获得成功的信息。所以点击按钮C.
当玩家点击其他按钮(大约10个按钮)时,将由myFunction()完​​成确定。

但我认为代码不优雅,因为有三层if-else语句。所以我尝试将其更改为switch-case语句。

    switch ($button) {
        case ('A'):
            break;
        case ('B') {
            if (!$this->functionB()) {
                return $this->returnJson(<some message>);
            }
            break;
        case ('C') {
            if (!$this->functionC()) {
                return $this->returnJson(<some message>);
            }
            break;
        default: // other buttons go here
            if (!$this->myFunction($button)) {
                return $this->returnJson(<some message>);
            }
            break;
        }
    }

    // other logic...

    return $this->returnJson(<success message>);

我仍然对此不满意,因为在switch语句中有if语句。

在这种情况下如何使我的代码更清洁?

我是编程新手,真的想在我的编码风格上建立良好的基础。 希望你能给我一些建议。非常感谢!

2 个答案:

答案 0 :(得分:0)

就个人而言,您在下面显示的案例陈述看起来可读,而且功能齐全。我从经验中发现,即使你有一些重复的线条,神秘的东西绝对不是你要走的路。但是,你甚至不是真的重复一行。如果你试图分离出函数,那么函数内的函数就会显得多余。

我确实看到了一件事,而不是从内部返回,程序流通常应该跟在函数的末尾,否则你最终会遇到无法访问的代码或难以解决的问题。你上面的代码,例如我认为你可能不小心做了这个,所以我希望它有助于我的观点。

例如,而不是去:

return myFunction($param);

使用此:

$returnVal=myFunction($param);

然后在最后,让它流向:     return $ returnVal;

有意义吗?

答案 1 :(得分:0)

您可以使用服务定位器式模式:在应用程序启动时,您将函数加载到键/值集合中,其中键是按钮名称,函数是值。来电时,您可以执行以下操作:

CAST(REPLACE(CubeNumber,'AA-','') as INT) BETWEEN 1 AND 20;

(我是C#开发人员,所以将其翻译成PHP!:D)