为什么循环中的这个PHP赋值总是打印第一个值?

我对这一小段测试代码的输出感到非常困惑:

<?php
$count = 0;
while ($fn_retval = do_the_thing($count) !== false) {
    print $fn_retval."n";
    $count++;
}

function do_the_thing($count) {
    if ($count > 3) {
        return false;
    } else {
        return $count;
    }
}
?>

输出是:

$ php ./test.php 
1
1
1
1

所以它正确地执行了 4 次迭代,但总是打印第一次迭代的返回值。我觉得我一定错过了一些非常明显的东西,因为这毫无意义。

有人可以解释一下这里发生了什么,因为我似乎无法以我认为可以的方式使用该赋值和检查构造。

回答

问题是顺序

$fn_retval = do_the_thing($count) !== false

被评估。如果您检查Operator Precedence,您将看到它!==的优先级高于=,因此它被评估为

do_the_thing($count) !== false

然后将结果分配给$fn_retval

要强制您遵循的顺序,请先使用方括号明确进行分配...

while (($fn_retval = do_the_thing($count)) !== false) {


以上是为什么循环中的这个PHP赋值总是打印第一个值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>