我有一个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,所有语法高亮显示代码正确形成,没有拼写错误。我很困惑。我错过了一些非常明显的东西吗?
答案 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则离开。通过将返回放在前面,您可以结束当前函数并启动另一个函数。