【问题标题】:PHP: Assign multiple variables in if statementPHP:在if语句中分配多个变量
【发布时间】:2017-10-25 14:53:29
【问题描述】:

我似乎无法在 "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 (e=mc^2 or E=Mc^2) ... 第二个赋值执行了吗?

标签: php if-statement variable-assignment


【解决方案1】:

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

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

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

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

Why 1 bar is coming through OP's code

【讨论】:

    【解决方案2】:

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

    <?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/字符串值的布尔真(strval(true))输出/是1

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

    查看下面的语句

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

    相当于这个。

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

    【讨论】:

    • 正确。+1。但是需要添加更多关于为什么1 bar来的解释?
    • 啊哈。不敢相信我以前从未遇到过这种情况。通常,我要么在 if 条件中只分配一个值,要么进行多重比较($a == 'foo'),这显然与 && 和类似结构没有关联。我认为 && 是一种条件分隔符,但显然在分配时它不是。谢谢!
    【解决方案3】:

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

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

    这样可以确保括号中的东西首先被执行,这会有所帮助。

    【讨论】:

    • 正确。+1。但是需要添加更多解释为什么1 bar来了?
    • 括号里的东西先执行。如果没有它们,它将是: if ($result1 = a(1) && $result2 = b(1)) 导致第二个变量未赋值。
    【解决方案4】:

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

    试试这个,

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

    【讨论】:

    • 我认为这无论如何都不是解决 OP 的问题或给他一个线索,为什么 1 bar 会出现在他的案子中?
    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 2014-03-05
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多