php在if条件内为变量赋值时存在错误


php is there a bug in assigning value to variable inside if condition?

请查看以下代码:

function getVar(){
    return "some string";
}
function test1(){
    if($a = getVar()){
        echo $a;
    }
}
function test2(){
    if($a = getVar() && $b = getVar()){
        echo $a;
    }
}
//test1();
test2();

我想你会明白发生了什么。只需尝试test1()test2()

为什么test2()制作$a 1

基本上,代码执行以下操作:if ($a = (getVar() && $b=getVar()))。这方面没有错误。"some string" && "some string" == true

您可以在文档中了解PHP中的运算符优先级。

它本质上运行的是:

<?php
function getVar(){
    return "some string";
}
function test1(){
    if($a = getVar()){
        echo $a;
    }
}
function test2(){
    if($a = (getVar() && $b=getVar())){
        echo $a;
    }
}
//test1();
test2();

?>

注意我添加的额外括号。

getVar()返回一个真实值。当它在布尔值的上下文中求值时(通过&&),它被强制转换为布尔值,因此整个表达式返回true。无论出于何种原因,echo只是将其显示为1,但您可以将其var_dump显示为查看其类型。

在test2()中,

$a = (getVar() && $b = getVar()) 

getvar(),返回一个字符串,以便将其分配给$b,然后将其还原为

$a = (getVar() && $b)
   then get var() return a string so it has a value,

则CCD_ 14

那么什么&amp;这样做是,它检查booleon值,双方都有boolean true,所以它返回boolean true并赋值给$a。这意味着b美元有1。