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

时间:2017-05-25 04:32:21

标签: 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;
}

?>

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

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

4 个答案:

答案 0 :(得分:4)

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

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

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

@marmeladze 在此提供正确的解释: -

Why 1 bar is coming through OP's code

答案 1 :(得分:1)

这完全是关于运算符优先级的

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

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

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

看下面的陈述

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

等同于此。

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

您必须添加==来检查条件。

试试这个,

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