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
语句中赋值并在同一语句中比较该值
<?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
最后 $int
是 false
。在 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
而不是 &&
。 and
和 or
的优先级低于赋值,并且专门用于这种情况。
if ($int = some_function($input) and $int != $other_int)
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
语句中赋值并在同一语句中比较该值
<?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
最后 $int
是 false
。在 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
而不是 &&
。 and
和 or
的优先级低于赋值,并且专门用于这种情况。
if ($int = some_function($input) and $int != $other_int)