PHP:在if语句中赋值多个变量

PHP: Assign multiple variables in if statement

我似乎无法在 "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;
}

?>

Returns“1 栏”而不是 "foo bar"。如果我删除第二个 condition/assignment 它 returns "foo".

有没有办法在 "if" 语句中分配多个变量,或者我们只能分配一个?

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

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

输出:- https://eval.in/804770

@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;
}

?>

https://repl.it/IQcU

更新

赋值运算符=是右结合的,也就是说,

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

等价于

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

评估

$result1 = ("foo" && [other valild assignment] )

这将导致

$result1 变为 true

and echo true/string 布尔值 true (strval(true)) outputs/is 1

你也可以检查那个版本,https://repl.it/IQcU/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;
}

使用 belo 示例进行检查

<?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';
}
?>