使函数返回0并将其存储在变量中

时间:2019-04-18 03:06:34

标签: php

似乎微不足道,但无法在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或另一个数字,而我只能将其捕获到变量中?

3 个答案:

答案 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