无法从函数返回值

时间:2013-04-28 20:03:02

标签: php function return

我有一个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)

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

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

我正在使用Netbeans,所有语法高亮显示代码正确形成,没有拼写错误。我很困惑。我错过了一些非常明显的东西吗?

3 个答案:

答案 0 :(得分:2)

我的猜测是你忘了回复:

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;
}

答案 1 :(得分:1)

您在函数中使用递归。

所以你的var_dump($ unserialized)是从递归调用中调用的,但是main调用返回false。

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

return unserialize_recursive($unserialized, $i);

答案 2 :(得分:0)

您在

前面缺少返回
  

unserialize_recursive($ unserialized,$ i);

所以应该是这样的

  

返回 unserialize_recursive($ unserialized,$ i);

没有返回函数会自行运行但是如果条件和执行返回FALSE则离开。通过将返回放在前面,您可以结束当前函数并启动另一个函数。