我正在使用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语句。
在这种情况下如何使我的代码更清洁?
我是编程新手,真的想在我的编码风格上建立良好的基础。 希望你能给我一些建议。非常感谢!
答案 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)