【发布时间】:2013-12-24 12:29:13
【问题描述】:
我一直在互联网上寻找更多关于 PHP 中的清理和验证的信息,这是我第二次遇到这种类型的函数,但我在理解这个 foreach 语句的工作原理时遇到了一些困难。
这是代码,取自here:
function sanitize($input) {
if (is_array($input)) {
foreach($input as $var=>$val) {
$output[$var] = sanitize($val);
}
}
else {
if (get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
$input = cleanInput($input);
$output = mysql_real_escape_string($input);
}
return $output;
}
所以我的疑问在于 $input is_array 的 foreach 语句,其中数组的每个索引都通过正在创建的函数传递。对于像我这样的新手程序员,我不确定如何在它的创建过程中调用一些东西。
我已经做了一些传递,咀嚼这个想法,并认为我已经找到了答案,但我不确定是否是这样,这就是我问这个问题的原因,以确认和指导一些文献这可能有助于我掌握这种类型的“使用”。
所以我在想,当函数被调用sanitize($someArray); 时,它将在 if 语句上评估为 true 并运行 foreach。在每个索引上运行sanitize($val); 时,它将跳转到else 语句并运行“单值”指令。当然,除非$input 是一个数组数组,在这种情况下,它将重复第一步,直到每个数组中的每个项目都被清除。
我的疑惑出现了,因为这在某种程度上是我所看到的:
function sanitize($input) {
if(foo){sanitize($input->i);}
else {...}
}
我本能地期待一个无限循环。
这有意义吗?这是代码中的错误吗?它是否有无限期运行的机会?
【问题讨论】:
标签: php arrays function recursion sanitization