Php 流量和逻辑-始终测试所需的直接条件!(!n)!=N
事先对不起,我只是不知道如何表达这个问题,也不知道如何寻找它。 我觉得应该有一个名字,某种原则,或问题,但我不知道。我的标题可能也没什么意义,但我希望它能给我足够的暗示 我想确定一种为项目构建代码的方法。特别是嵌套条件。如果你不能用AND等将它们打在一起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) {
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;
}
非常感谢。这实际上为我根本没有考虑到的问题带来了新的曙光——正如你所说的,检查和意图的优先性。