似乎微不足道,但无法在SO上找到针对此特定情况的解决方案
一个函数可能返回值0或另一个数字,然后我要将其存储在变量$s
中以计算内容。但是找不到一种干净的方法。
例如:
function f() {
$v = "0";
return $v;
}
if($s = f() !== false) {
echo $s;
// ^ I want 0, but the value above is 1 (since it's true)
}
我尝试将其作为字符串返回
返回“ 0”而不是数字,但这不起作用。
如果我这样做,它将不会评估为真,因此什么也不会发生
if($s = f()) {
// returns nothing
}
但是当我var_dump(f())
时,它确实显示了字符串'0'(长度= 1)
我可以做
if(var_dump(f()) == 0)
OR
if(f() == 0)
但是没有更干净的方法可以执行此操作,因此该函数可能返回0或另一个数字,而我只能将其捕获到变量中?
答案 0 :(得分:2)
添加括号:
if (($s = f()) !== false) {
否则,您将计算值f() !== false
并将其分配给$s
,而不是将f()
分配给$s
,然后与false
进行比较。 / p>
答案 1 :(得分:2)
第一
if($s = f() !== false) {
echo $s;
// ^ I want 0, but the value above is 1 (since it's true)
}
这里发生的是,将f()的返回值严格与false进行比较,即,将“ 0”与false进行比较。它们不是严格相等的,因此f()!== false返回true,并以1的形式存储在$ s中。
下一步
if($s = f()) {
// returns nothing
}
这不会输入if块,因为$ s包含“ 0”,并且它大致等于false。
下一步
if(var_dump(f()) == 0) or if(f() == 0)
之所以有效,是因为它将“ 0”与0进行了比较,这是正确的。因此它进入了方块。
请记住,如果条件比较松散或==而===进行严格比较。进一步了解here。
所以,这应该适合您的情况
if(($s = f()) !== 0)
如果f()返回整数
答案 2 :(得分:1)
尝试一些括号:
if(($s = f()) !== false) {
强制$s
等于f()
,而不是f() !== false