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

Posted

技术标签:

【中文标题】PHP:在if语句中分配多个变量【英文标题】:PHP: Assign multiple variables in if statement 【发布时间】: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) ... 第二个赋值执行了吗? 【参考方案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 会出现在他的案子中?

以上是关于PHP:在if语句中分配多个变量的主要内容,如果未能解决你的问题,请参考以下文章

在 if 语句中分配 fopen 的结果

编译器错误`在if语句中分配不兼容的类型`[重复]

为啥在单个语句中分配动态对象的成员变量会导致 PHP 中的语法错误?

ORACLE:在同一条语句中分配和检查

if 语句中的变量赋值

通过 $(if ...) 在 makefile 中分配变量的语法