php - 构造条件逻辑的最佳方法是什么?

标签 php formatting conditional

<分区>

我想到有许多不同的方法来构造条件逻辑。据我所知,只要我们设置错误以结束脚本(或者您可以想象相同的示例但在函数中返回),那么以下示例是相同的:

示例 1

if($condition1) {
    trigger_error("The script is now terminated");
    }

if($condition2) {
    trigger_error("The script is now terminated");
    }

echo "If either condition was true, we won't see this printed";

示例 2

if(!$condition1) {
    if(!$condition2) {
        echo "If either condition was true, we won't see this printed";
        }
    else {
        trigger_error("The script is now terminated");
        }
    }
else {
    trigger_error("The script is now terminated");
    }

示例 3

if($condition1) {
    trigger_error("The script is now terminated");
    }
else {
    if($condition2) {
        trigger_error("The script is now terminated");
        }
    else {
        echo "If either condition was true, we won't see this printed";
        }
    }

示例 4 -- 改编自 Fraser's Answer

function test($condition) { 
    if($condition) {
        trigger_error("The script is now terminated");
        }   
    }

test($condition1);

test($condition2);

echo "If either condition was true, we won't see this printed";

就个人而言,我倾向于编写示例 1 中的代码。这是因为我觉得通过以这种方式检查结束脚本(或函数)的条件,我可以清楚地定义脚本执行和未执行的内容,即所有内容在条件执行之前,该行之后的所有内容都没有执行。这意味着当我在第 147 行遇到错误时,我会立即知道发生了什么,这有助于我更快地找到错误。此外,如果我突然意识到我需要在 $condition1 之前测试 $condition2,我可以通过简单的复制粘贴进行更改。

我看到很多代码都像示例 2 中那样编写,但对我来说,调试起来似乎要复杂得多。这是因为,当嵌套太大时,错误将在底部的某个较远的行触发,并与由大量嵌套代码引起的错误条件分开。此外,更改条件序列可能会更加困惑。

您可以混合使用这两种样式,例如示例 3,但这似乎会使事情过于复杂,因为所有“else”本质上都是多余的。

我错过了什么吗?构建条件代码的最佳方式是什么?有比这些例子更好的方法吗? 是否存在一种风格可能优于另一种风格的特定情况?

编辑:示例 4 看起来很有趣,我没有考虑过。您还可以将错误消息作为第二个参数传递。

谢谢!

附言请记住,我可能需要在检查 $condition1 和 $condition2 之间执行一些任意步骤,因此任何替代方案都必须适应这一点。否则,还有更好的选择,例如 if($condition1 || $condition2)。

最佳答案

我属于示例 1 阵营。根据经验,所需的缩进越少越好。

// Exit early if there are errors.
if ($n < 0) {
    die "bad n: $n";
}

// Handle trivial cases without fuss.
if ($n == 0) {
    return 0;
}

/* Now the meat of the function. */
$widget->frob($n);
foreach ($widget->blaxes as $blax) {
    checkFrobbingStatus($blax);
}
// ...And another 20 lines of code.

当您使用 if/else 并将成功代码和错误代码放在并行部分时,您会使其看起来好像两个代码块是相等的。实际上,不应强调边缘情况和错误条件。通过有意地及早处理错误,然后将“重要”代码放在 else 子句中,我觉得这样可以使重要代码的位置在视觉上更加清晰。

“这是所有先决条件。现在这是好东西。”

关于php - 构造条件逻辑的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286587/

相关文章:

ssis - 根据条件控制 SSIS 包中的流程

php - 传递消息时出错 我自己的 PHP Chat

javascript - 当 PHP 代码开始运行时弹出 Javascript 警报,并在执行完成时弹出警报

java - 以正确的形式在 JSON 文件中写入数据 JAVA

exception - 如果您是唯一接触代码的人,是否需要try/except block ?

error-handling - 检查 WordPress 插件系统要求的正确方法

php - PHP套接字错误代码是否有常量?

php - 如何在 Php Mysql 中使用 while 循环从下拉菜单中选择一个项目

c# - DateTime.ToString 格式

html - 如何将 flexbox 中的 DIV 固定在第一行?