如果有条件,php是否存在将变量赋值给变量的错误?

时间:2013-11-21 07:48:46

标签: php if-statement variable-assignment

请看这段代码:

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

3 个答案:

答案 0 :(得分:6)

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

您可以了解the operator precedence in PHP in the doc

答案 1 :(得分:2)

基本上是这样运行的:

<?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()返回真值。当它在布尔值(通过&&)的上下文中进行评估时,它会被转换为bool,因此整个表达式返回trueecho只是出于某种原因将其显示为1,但您可以var_dump来查看其类型。

答案 2 :(得分:0)

在test2()中,

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

getvar(),返回一个字符串,使其分配给$ b,然后将其减少为,

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

   then get var() return a string so it has a value,

然后$a = (some value && $b)

然后&amp;&amp; do,它检查booleon值,两边都有布尔值true,所以它返回boolean true并赋值给$ a。这意味着$ b有1个。