我最近遇到了一些代码中的错误,其中一系列函数调用被聚合到一个成功条件中。像
这样的东西$success = true;
foreach($foo as $f) {
$success = $success && do_foo($f);
}
错误是do_foo()旨在在整个集合中运行(它有副作用)。但&&运算符short-circuts,一旦遇到false,就不会在集合的其余部分调用do_foo。很容易重构,但它让我想知道:
PHP是否有一个不会短路的逻辑运算符?
编辑:让我说清楚,我不是在问如何解决这个问题。这是一个关于语法的假设性问题。
答案 0 :(得分:2)
你为什么需要它?就这样做:
$success = true;
foreach($foo as $f) {
$foo_done = do_foo($f);
$success = $success && $foo_done;
}
修改强>
我可以想到一个工作,而不是&&
我可以使用乘法*
并转换为布尔值:
$success = (bool)($success * do_foo($f));
答案 1 :(得分:0)
没有专门的操作符用于此目的,但您可以选择执行这样的重要操作(假设do_foo($f)
总是返回一个布尔值:
$success &= do_foo($f);
结果将是数字0或1而不是布尔值,但在条件中使用时它应该无关紧要。
如果函数并不总是返回布尔值,或者上面的内容太令人不安:
$success = (bool)($success & do_foo($f));
那就是说,do_foo($f)
应该无条件地运行,并且它的返回值在下一个语句中使用。