【问题标题】:Cannot return value from function无法从函数返回值
【发布时间】:2013-04-22 10:42:53
【问题描述】:

我有一个 PHP 函数:

function unserialize_recursive($data, $i = 0) {

    $unserialized = unserialize($data);

    if ($unserialized) {
        $i++;
    }

    if (!is_string($unserialized) || unserialize($unserialized) === FALSE) {
        /* placeholder - see explanation below */
        return array($i, $unserialized);
    } elseif (unserialize($unserialized) !== FALSE) {
        unserialize_recursive($unserialized, $i);
    }
    return FALSE;
}

我调用这个函数:

$data = unserialize_recursive($serialized_string);
var_dump($data);

但是var_dump($data) 的输出是bool(false)

但是,如果我在文本 /* placeholder - see explanation below */ 的位置添加 var_dump($unserialized),我会得到预期的输出。

那么为什么我不能返回那个变量 ($unserialized)?如果我在函数中使用gettype(),它会返回array

我使用的是 Netbeans,所有语法高亮显示代码格式正确,没有拼写错误。我很困惑。我错过了一些非常明显的事情吗?

【问题讨论】:

  • 你为什么用FALSE而不是false
  • 我想你忘记了退货。您可能还需要通过引用传入 $i 参数。
  • @Dai:虽然这个问题无关紧要,我怀疑你是否真的感兴趣,但答案是出于可读性原因我使用大写版本。

标签: php function return


【解决方案1】:

我的猜测是你忘记了回报:

function unserialize_recursive($data, $i = 0) {

$unserialized = unserialize($data);

if ($unserialized) {
    $i++;
}

if (!is_string($unserialized) || unserialize($unserialized) === FALSE) {
    /* placeholder - see explanation below */
    return array($i, $unserialized);
} elseif (unserialize($unserialized) !== FALSE) {
    return unserialize_recursive($unserialized, $i);
}
return FALSE;
}

【讨论】:

    【解决方案2】:

    您在函数中使用递归。

    因此,您的 var_dump($unserialized) 是从递归调用中调用的,但 main 调用返回 false。

    您可能需要更改“unserialize_recursive($unserialized, $i);”到

    return unserialize_recursive($unserialized, $i);
    

    【讨论】:

      【解决方案3】:

      你缺了return前面的

      unserialize_recursive($unserialized, $i);

      所以应该是这样的

      返回 unserialize_recursive($unserialized, $i);

      没有返回函数会自行运行,然后离开 if 条件并执行 return FALSE。通过将 return 放在前面,您可以结束当前函数并启动另一个函数。

      【讨论】:

      • 谢谢 - 关于结束函数并开始另一个函数的行对我来说是最有意义的部分,尽管我实际上仍然对为什么它不像我第一次写它的方式工作感到困惑.
      猜你喜欢
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多