Php 流量和逻辑-始终测试所需的直接条件!(!n)!=N

Php 流量和逻辑-始终测试所需的直接条件!(!n)!=N,php,if-statement,nested,logic,structure,Php,If Statement,Nested,Logic,Structure,事先对不起,我只是不知道如何表达这个问题,也不知道如何寻找它。 我觉得应该有一个名字,某种原则,或问题,但我不知道。我的标题可能也没什么意义,但我希望它能给我足够的暗示 我想确定一种为项目构建代码的方法。特别是嵌套条件。如果你不能用AND等将它们打在一起 sell_insurance($person): bool { if ($person->healthy() === true) { if ($person->rich() === true) {

事先对不起,我只是不知道如何表达这个问题,也不知道如何寻找它。 我觉得应该有一个名字,某种原则,或问题,但我不知道。我的标题可能也没什么意义,但我希望它能给我足够的暗示

我想确定一种为项目构建代码的方法。特别是嵌套条件。如果你不能用AND等将它们打在一起

sell_insurance($person): bool {
    if ($person->healthy() === true) {
        if ($person->rich() === true) {
            print 'sold!';
            return true;
        }
        print 'not enough money';
        return false;
    }
    print 'too risky to sell';
    return false;
}
与:

sell_insurance($person): bool {
    if ($person->healthy() !== true) {
        print 'too risky';
        return false;
    }
    if ($person->rich() !== true) {
        print 'too poor';
        return false;
    }
    print 'sold!';
    return true;
}
我认为后者更容易阅读,如果有50个嵌套的
if
s,那就太难看了。但是,我想确保我不会遇到问题。有些意想不到的事我在这里看不到

这些测试很简单。我担心的一件事是,
not(nota)
不一定等于
a
。有时我们可能期望逻辑是布尔型的,而实际上可能不是。我可能会测试
person->health()false
,但我可能没有意识到它可能不是
true
,而是一个字符串
“几乎”
。或者做一些不那么愚蠢的事

我另一个关心的问题是,怎么说呢?后一种结构默认为
true
。与第一种方法相比,它感觉不那么安全

向更有经验的人提问-每种方法的优点/缺点是什么?你会坚持哪种结构,还是将它们混在一起?谢谢


我正在学习PHP,但我想这或多或少适用于任何语言。

你也可以从另一个角度来看待这一点,要么此人被接受,要么被拒绝,是什么原因导致他的请求被拒绝,例如: 如果这个人很穷而且不健康,你只会“看到”他不健康,因为你在检查之前就回来了。 这一切都取决于你想要什么作为优先事项,而不仅仅是结构方面

第一种方法表明,你必须保持健康才能获得该物品, 另一方面,第二个只是增加了一些逻辑(这可能没有意义)


如果有更多的陈述,这将取决于优先级,如果你从每个陈述中返回,我将选择第二种方式,但这一切取决于什么更有意义,什么更容易理解。

在这种情况下,有几种方法是可能的,其中两种是: 使用语句使所有内容更加简洁易读。 但是,正如科洛斯所指出的,这取决于你的优先级和总体情况

您甚至可以去掉逻辑运算符,有时我会使用下面这样的方法来获得简单的比较语句:

$var= $person->healthy() ? 'true' : 'false';
 $var.=$person->rich() ? 'true' : 'false';

    switch ($var) {
case "truetrue":
 echo "SOLD!";
    break;
case "falsetrue":
 echo "too risky to sell";
    break;
case "truefalse":
 echo "too poor!";
    break;
default:
    echo "NO WAY!";
}
另一个常用的用法是在开始时使用一个或多个包含“角落案例”的so colled保护条款。 在你的例子中,富有和健康是强制性的,所以让我们把它作为保护条款:

if ($person->healthy() && $person->rich()) {
   print "SOLD!";
    return true;
} elseif($person->healthy()) {
    print "too poor...";
     return false;
} elseif($person->rich()) {
    print "too risky...";
     return false;
} else {
    print "NO WAY!";
     return false;
}

非常感谢。这实际上为我根本没有考虑到的问题带来了新的曙光——正如你所说的,检查和意图的优先性。