我已经检查了一些其他问题,但他们并没有真正给我我期望的答案..
我的代码是这样的..
private function handle()
{
if()
{
if(!condition)
{
if(!condition)
{
if(!condition)
{
if(!condition))
{
if(!condition)
{
if(!condition)
{
if(!condition)
{
if(!condition)
{
if(!condition)
{
code
}
return;
}
return;
}
return;
}
return;
}
return;
}
return;
}
return;
}
return;
}
return;
}
}
在我看来,它是可读的但很混乱,遗憾的是我还没有找到让它看起来“漂亮”的方法。有什么想法吗?
编辑:每次回报都不同。 编辑2:给自己一个答案,谢谢大家!
答案 0 :(得分:3)
条件可以由&&
运算符合并。它从左到右工作,这意味着,一旦从左边开始的任何一个失败,它就会停止评估条件..
if($a) {
if($b) {
}
}
可以替换为
if($a && $b) {
}
答案 1 :(得分:0)
使用变量检查,或将条件组合成更少的IF语句。
可变检查如下:
$execute = TRUE;
// Opposite of what you want, e.g. if you want $a only to be TRUE, do $a !== TRUE
if (condition) {
$execute = FALSE;
}
...
// If all the conditions were met, then everything is OK
if($execute === TRUE) {
// code
}else {
// return
}
编辑: 如果你想要更多地控制返回,例如,变量检查可以优选地组合IF语句。如果某个条件失败,那么特定的事情会发生,这种组合条件不能总是允许的。
答案 2 :(得分:0)
就像已发布的使用
if(condition1&&condition2){}
或者如果这不起作用,您也可以使用在条件为真时立即停止的功能
function some(){
if(!conditon 1){return 0;}
if(condition 2) {return 1;}
}
这提供了更多的权力作为第二,如果只有在第一次不满足时才有效。 您必须根据您的要求进行选择。有时虽然嵌套循环是不可避免的。
答案 3 :(得分:0)
我认为它已经找到了一个很好的方法,基本上我会为每个基本条件创建一个方法,并且我将在if语句中使用按位AND运算符(&)调用它们,不要短路。
/**
* nonsql_condition - It means it doesn't check with the database
*
* sql_condition - It means it does check with the database.
*/
if(!$this->nonsql_condition() & !$this->nonsql_condition() & !$this->nonsql_condition() & !$this->nonsql_condition())
{
if(!$this->sql_condition())
{
return error;
}
if(!$this->sql_condition())
{
return error;
}
code;
}
这使我可以在我的方法中使用更少的代码行,还可以不对我的数据库进行不必要的查询。