Php 避免在复杂的if/else语句中重复代码
我经常遇到这个问题:您有一系列的Php 避免在复杂的if/else语句中重复代码,php,Php,我经常遇到这个问题:您有一系列的if/else语句,其中预期的结果可能来自两个完全不同的分支,最终您会在这两个分支上复制代码。下面是一个例子: if (condition1) { return error } else { if (condition2) { return intendedResult } else { if (condition3) { return error } else {
if/else
语句,其中预期的结果可能来自两个完全不同的分支,最终您会在这两个分支上复制代码。下面是一个例子:
if (condition1) {
return error
} else {
if (condition2) {
return intendedResult
} else {
if (condition3) {
return error
} else {
return intendedResult
}
}
}
目前我在一个PHP脚本中遇到了这个问题,预期的结果是大约200行PHP查询、HTML和附加的if/else
语句。这是您应该何时使用函数的主要示例吗?然后返回
连接字符串中的所有代码
编辑:
谢谢你的回复。我可以看出我的逻辑需要整理一下。如果我给你一个真实的例子,你能帮我重新构建我的逻辑吗?我认为这比我的伪代码要复杂一点
我从数据库中提取两个日期,$lift\u deadline
和$show\u guide\u close
,根据今天的日期与这些日期的关系,执行以下操作:
if ($lift_deadline > $today) {
echo "No access until " . $lift_deadline;
} else {
if ($lift_deadline !== "0000-00-00") {
if ($today > $show_guide_close) {
$use_date = $show_guide_close;
} else {
$use_date = $lift_deadline;
}
echo "HTML Table"; // Intended result goes here, using $use_date
} else {
if ($show_guide_close > $today) {
echo "No access until " . $show_guide_close;
} else {
$use_date = $show_guide_close;
echo "HTML Table"; // Intended result also goes here
}
}
}
是的,函数是简化代码并使其更易于阅读的一种方法。它可能也值得研究和使用。是的,函数是简化代码并使其更易于阅读的一种方法。它可能也值得研究和使用。在简单的例子中,我使用switch语句来处理类似的内容
switch(true)
{
case (condition1):
break;
case (condition2):
break;
default:
}
在简单的例子中,我使用switch语句来处理类似的内容
switch(true)
{
case (condition1):
break;
case (condition2):
break;
default:
}
当然,解决方案的一部分是将
intentidedResult
编码成一个单独的方法,但只需重新组织条件就可以帮助:
if ($condition1) {
return 'error';
}
if (!$condition2 && $condition3) {
return 'error';
}
return $this->intendedResult();
这可以进一步简化为:
return ($condition1 || $condition3) ? 'error' : $this->intendedResult();
但这可能不那么易读,也不能真正说明我的观点,正如Tom提到的,将控制结构展平是解决方案的一部分,当然是将
intentidedResult
代码变成一个单独的方法,但只要重新组织条件就可以帮助:
if ($condition1) {
return 'error';
}
if (!$condition2 && $condition3) {
return 'error';
}
return $this->intendedResult();
这可以进一步简化为:
return ($condition1 || $condition3) ? 'error' : $this->intendedResult();
但这可能不那么易读,也不能真正说明我的观点,正如Tom提到的,将控制结构扁平化您提供的代码并不复杂。如果(条件1 | |条件3){return error}或者{return intendedResult}是的,intendedResult应该是一个函数,那么它可以这样编写!错误也应该如此!应该是
if(condition1 | |(!condition2&&condition3)){return error}else{return intendedResult}
您提供的代码并不复杂。如果(条件1 | |条件3){return error}或者{return intendedResult}是的,intendedResult应该是一个函数,那么它可以这样编写!错误也应该如此!应该是if(condition1 | |(!condition2&&condition3)){return error}或者{return intentendedresult}
对我来说,在return$returnVar
之前的函数中,无尽的$returnVar.=…
感觉不正确…函数应该是简短的。您应该以函数为目标,以便在函数末尾只有一个返回。使用对象/类和函数几乎会自动改变你的代码结构和条件,并且更具可读性。但对我来说,在返回$returnVar之前,函数内部无休止的$returnVar.=…
让人感觉不对劲…函数应该是短而快的。您应该以函数为目标,以便在函数末尾只有一个返回。使用对象/类和函数几乎会自动改变您构建代码和条件的方式,并且更具可读性。请告诉我,因此我将在此处放置我的rational:由于返回结束了流程流,您可以通过在返回错误(或引发异常)时放置检查来平坦您的逻辑在你函数的顶部。请告诉我,我将把我的rational放在这里:因为返回结束了流程流,所以你可以通过在你函数的顶部放置返回错误(或抛出异常)时的检查来平坦你的逻辑。