请查看以下代码:
function getVar(){
return "some string";
}
function test1(){
if($a = getVar()){
echo $a;
}
}
function test2(){
if($a = getVar() && $b = getVar()){
echo $a;
}
}
//test1();
test2();
我想你会明白发生了什么。只需尝试test1()
和test2()
为什么test2()
制作$a
1
?
基本上,代码执行以下操作:if ($a = (getVar() && $b=getVar()))
。这方面没有错误。"some string" && "some string" == true
您可以在文档中了解PHP中的运算符优先级。
它本质上运行的是:
<?php
function getVar(){
return "some string";
}
function test1(){
if($a = getVar()){
echo $a;
}
}
function test2(){
if($a = (getVar() && $b=getVar())){
echo $a;
}
}
//test1();
test2();
?>
注意我添加的额外括号。
getVar()
返回一个真实值。当它在布尔值的上下文中求值时(通过&&
),它被强制转换为布尔值,因此整个表达式返回true
。无论出于何种原因,echo
只是将其显示为1
,但您可以将其var_dump
显示为查看其类型。
在test2()中,
$a = (getVar() && $b = getVar())
getvar(),返回一个字符串,以便将其分配给$b,然后将其还原为
$a = (getVar() && $b)
then get var() return a string so it has a value,
则CCD_ 14
那么什么&;这样做是,它检查booleon值,双方都有boolean true,所以它返回boolean true并赋值给$a。这意味着b美元有1。