我试图简化一些代码。我发现如果你在if语句中分配一个值,但是这个值最终为null,那么得到的if为FALSE。
示例:
if($myvar = doSomething()) {
echo '$myvar = '.$myvar;
}
else {
echo "was null";
}
function doSomething() {
$a = null;
return $a;
}
上面的脚本将显示"为空"。但是,如果$ a = 1,那么它将显示" myvar = 1"。
我试图找到一些关于这种行为的文档,但还没有成功。我的所有资料来源都很接近,但不能很好地描述它。
我的问题:这是预期的行为吗?如果doSomething()返回null,那么我做的是if(null) {...
吗?
编辑:是的我是说' ='不是' =='在if语句中。我要问的是,它应该总是返回false:if($a = null)
而这会返回true if($a = 1)
答案 0 :(得分:2)
你正在做的事情是完全可以预料到的。赋值表达式$a=b
的值是赋值b
。所以,
if($myvar = doSomething()) { ...
相当于
$myvar = doSomething();
if ($myvar) { ...
此行为与if
语句完全无关。 The documentation在第二段中明确指出:
赋值表达式的值是指定的值。也就是说,“$ a = 3”的值是3。
答案 1 :(得分:0)
问题出在这里:
$myvar = doSomething()
应该是
$myvar == doSomething()
您现有的条件将始终评估为TRUE,因为=
运算符每次都会返回TRUE! :)
目前正在发生什么
doSomething()
返回null
所以:
if(a = null) => if(null)
此条件表示false
,因此控件转到else
部分
doSomething()
返回值= 1,2 ..... n
if($a = 2 ) => if(2)
此条件表示true
,因此执行if
!
答案 2 :(得分:-1)
尝试在变量中调用函数。
$getvar = doSomething();
if($myvar == $getvar) {
// stuff
}