PHP if 语句 - 逻辑

PHP if statements - logic

some_function($input) returns 整数 23

$other_int 的值不等于 23

代码片段 1

if ($int = some_function($input) && $int != $other_int) {...}

代码片段 2

$int = some_function($input);
if ($int != $other_int) {...}

我编写代码片段 1 时认为 if 语句在上述条件下会 return 为真。我错了

片段 2 中的 if 语句为真。

为什么?

因此,出于某种原因,像这样在 if 子句中赋值是一种不好的做法。就是说,您没有分配自己的想法。这就是您实际在做的事情:

$int = (some_function($input) && $int != $other_int);

计算结果为真。要获得您想要的结果,请将代码更改为

if (($int = some_function($input)) && ($int != $other_int)) {...}

但实际上,不要在 if() 语句中分配变量。

您不能在 if 语句中赋值并在同一语句中比较该值

https://3v4l.org/FlE6u

<?php

function somefunc() {
    return 23;
}

if($int = somefunc() && $int == 23) {
    echo 'Equal';
} else {
    echo 'Not Equal';
}
echo "\n";
var_dump($int);

您会注意到错误

Notice: Undefined variable: int in /in/GHVKs on line 7

最后 $intfalse。在 if

之外分配它

有趣的是,一个变量不能在if 语句的条件下同时被初始化和使用。您可能找到了 bug/feature 个 php。

function some_function()
{
    return 23;
}

$intA = 0;
if ($intA = some_function()
    && $intA != $other_int
) {
    echo 'hello world!'; // works fine
}

if ($intB = some_function()
    && $intB != $other_int
) {
    echo 'hello world!'; // PHP Notice:  Undefined variable: intB
}

&&!=的优先级高于赋值运算符=

参见 http://www.php.net/manual/en/language.operators.precedence.php

所以在条件语句中:

if ($int = some_function($input) && $int != $other_int) {...}

它执行 != 然后 &&,但是 $int 还没有被初始化(假设你没有在那个条件之外初始化它)所以右边 != 总是 returns 错误。

正如其他人所提到的,&& 的优先级高于赋值,因此您在 之前 执行逻辑运算 给变量赋值。

您可以使用 and 而不是 &&andor 的优先级低于赋值,并且专门用于这种情况。

if ($int = some_function($input) and $int != $other_int)