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”语句中分配多个变量,还是仅限于一个?
需要()在每个作业中添加括号,如下所示:-
if (($result1 = a(1)) && ($result2 = b(1)))
{
echo $result1 . ' ' . $result2;
}
Run Code Online (Sandbox Code Playgroud)
@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;
}
?>
Run Code Online (Sandbox Code Playgroud)
更新
赋值运算符=是右关联的,这意味着对右侧操作数的求值优先于左侧操作数。
因此,
$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)