请看这段代码:
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
?
答案 0 :(得分:6)
基本上,代码执行以下操作:if ($a = (getVar() && $b=getVar()))
。这没有错误。 "some string" && "some string" == true
答案 1 :(得分:2)
基本上是这样运行的:
<?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()
返回真值。当它在布尔值(通过&&
)的上下文中进行评估时,它会被转换为bool,因此整个表达式返回true
。 echo
只是出于某种原因将其显示为1
,但您可以var_dump
来查看其类型。
答案 2 :(得分:0)
在test2()中,
$a = (getVar() && $b = getVar())
getvar(),返回一个字符串,使其分配给$ b,然后将其减少为,
$a = (getVar() && $b)
then get var() return a string so it has a value,
然后$a = (some value && $b)
然后&amp;&amp; do,它检查booleon值,两边都有布尔值true,所以它返回boolean true并赋值给$ a。这意味着$ b有1个。