在循环中使用bool算法的PHP出错

Mic*_*has 0 php loops boolean

看起来在PHP中有一个错误,循环中有布尔运算.

在这个特定的例子中,我测试是否设置了所有重要的表单字段(由对象表示).这var_dump是为了debuging目的.

$allset = true;
foreach ($forms as $one):
    $allset = $one->wasSet() and $allset;
endforeach;
var_dump($allset);
foreach ($more as $one):
    $allset = $one->wasSet() and $allset;
endforeach;
var_dump($allset);
$allset = $iwasthere->wasSet() and $allset;
var_dump($allset);
Run Code Online (Sandbox Code Playgroud)

此代码可能会失败.第一个转储可能返回false,第二个返回true.

我的问题.

如何避免此错误并拥有简短的代码?


PS

if现在用块.

Gum*_*mbo 8

这里的问题是=运营商的优先级高于and运营商.因此赋值表达式只是逻辑表达式的一部分,整个表达式与此相当:

($allset = $one->wasSet()) and $allset;
Run Code Online (Sandbox Code Playgroud)

将逻辑表达式放在括号中或使用&&而不是and:

$allset = ($one->wasSet() and $allset);
$allset = $one->wasSet() && $allset;
Run Code Online (Sandbox Code Playgroud)