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

Bob*_*dor 4 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) && $result2 = b(1))
{
    echo $result1 . ' ' . $result2;
}

?>
Run Code Online (Sandbox Code Playgroud)

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

有没有办法在“if”语句中分配多个变量,还是仅限于一个?

Ana*_*Die 5

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

if (($result1 = a(1)) && ($result2 = b(1)))
{
    echo $result1 . ' ' . $result2;
}
Run Code Online (Sandbox Code Playgroud)

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

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

为什么1 bar要通过 OP 的代码


mar*_*dze 5

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

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

?>
Run Code Online (Sandbox Code Playgroud)

https://repl.it/IQcU

更新

赋值运算符=是右关联的,这意味着对右侧操作数的求值优先于左侧操作数。

因此,

$result1 = a(1) && $result2 = b(1)
Run Code Online (Sandbox Code Playgroud)

相当于,

$result1 = (a(1) && $result2 = b(1))
Run Code Online (Sandbox Code Playgroud)

它评估

$result1 = ("foo" && [other valild assignment] )
Run Code Online (Sandbox Code Playgroud)

这将导致,

$result1变成true

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

您还可以检查该修订版,https://repl.it/IQcU/1

看看下面的声明

$result1 = a(1) && $result2 = b(1)  
Run Code Online (Sandbox Code Playgroud)

相当于这个。

 $result1 = (a(1) && $result2 = b(1)) 
Run Code Online (Sandbox Code Playgroud)

  • 啊哈。不敢相信我以前从未遇到过这个。通常,我要么在 if 条件中只分配一个值,要么进行多次比较 ($a == 'foo'),这显然不会跨 &amp;&amp; 和类似结构关联。我认为 &amp;&amp; 是一种条件分隔符,但显然在进行赋值时它不是。谢谢! (3认同)
  • 正确。+1。但是需要添加更多关于为什么会出现“1 bar”的解释吗? (2认同)