PHP:在if语句中分配多个变量

PHP:在if语句中分配多个变量,php,if-statement,variable-assignment,Php,If Statement,Variable Assignment,我似乎无法在“if”语句中分配多个变量。以下代码: <?php function a ($var) { if ($var == 1) { return 'foo'; } return false; } function b ($var) { if ($var == 1) { return 'bar'; } return false; } if ($result1 = a(1) &

我似乎无法在
“if”
语句中分配多个变量。以下代码:

<?php

function a ($var)
{
    if ($var == 1)
    {
        return 'foo';
    }

    return false;
}

function b ($var)
{
    if ($var == 1)
    {
        return 'bar';
    }

    return false;
}

if ($result1 = a(1) && $result2 = b(1))
{
    echo $result1 . ' ' . $result2;
}

?>

返回“1 bar”而不是“foo bar”。如果删除第二个条件/赋值,它将返回“foo”


是否有一种方法可以在“if”语句中分配多个变量,还是仅限于一个?

需要在每个分配中添加括号
()
,如下所示:-

if (($result1 = a(1)) && ($result2 = b(1)))
{
    echo $result1 . ' ' . $result2;
}
输出:-

@marmeladze给出了正确的解释:-


这都是关于运算符优先级的

<?php

function a ($var)
{
    if ($var == 1)
    {
        return 'foo';
    }

    return false;
}

function b ($var)
{
    if ($var == 1)
    {
        return 'bar';
    }

    return false;
}

if (($result1 = a(1)) && ($result2 = b(1)))
{
    echo $result1 . ' ' . $result2;
}

?>
相当于,

$result1 = (a(1) && $result2 = b(1))
评估

$result1 = ("foo" && [other valild assignment] )
这将导致,

$result1
变为
true

echo true
/boolean true(
strval(true)
)的字符串值输出为1

您也可以检查该修订

看看下面的陈述

$result1 = a(1) && $result2 = b(1)  
是这个的等价物

 $result1 = (a(1) && $result2 = b(1)) 

最后一个if语句需要一些括号,应该是:

if (($result1 = a(1)) && ($result2 = b(1)))
{
     echo $result1 . ' ' . $result2;
}

这可以确保首先执行括号中的内容,这会有所帮助。

您必须添加
==
以检查条件

试试这个

if ($result1 == a(1) && $result2 == b(1))
{
    echo $result1 . ' ' . $result2;
}
用下面的例子检查

<?php 

function a ($var)
{
    if ($var == 1)
    {
        return 1;
    }

    return false;
}

function b ($var)
{
    if ($var == 1)
    {
        return 2;
    }

    return false;
}

if (1 == a(1) && 2 == b(1))
{
    echo 'success';
}
?>


正确。+1.但是需要添加更多关于
1条
为什么会出现的解释吗?括号中的内容首先执行。如果没有它们,它将是:如果($result1=a(1)和&$result2=b(1))导致第二个变量未赋值。正确。+1。但是需要添加更多关于为什么出现
1 bar
的解释?啊哈。真不敢相信我以前从没见过这个。通常,我要么在if条件中只指定一个值,要么进行多重比较($a=='foo'),这显然不会跨&&和类似的结构进行关联。我认为&&是一种条件分隔符,但显然在执行赋值时它不是。谢谢我不认为这是在解决OP的问题,或者给他一个线索,为什么
1 bar
会出现在他的案例中?这是一个非常糟糕的主意。如果在两个作业之间设置“或”条件会怎么样?如果(e=mc^2或e=mc^2)。。。第二个任务执行了吗?
<?php 

function a ($var)
{
    if ($var == 1)
    {
        return 1;
    }

    return false;
}

function b ($var)
{
    if ($var == 1)
    {
        return 2;
    }

    return false;
}

if (1 == a(1) && 2 == b(1))
{
    echo 'success';
}
?>