我正在学习PHP,并在观看Lynda.com php教程时遇到了一个问题。
https://www.lynda.com/PHP-tutorials/Blocking-suspect-phrases/418256/452170-4.html?autoplay=true
以下是用于检测在线表单中的可疑短语的代码。
$ value是在线表单输入值。
$suspect = false;
$pattern = '/Content-type:|Bcc:|Cc:/i';
function isSuspect($value, $pattern, &$suspect) {
if (is_array($value)) {
foreach ($value as $item) {
isSuspect($item, $pattern, $suspect);
}
} else {
if (preg_match($pattern, $value)) {
$suspect = true;
}
}
}
我知道函数isSuspect是一个递归函数。我不明白为什么在这里使用这个递归函数以及它将如何影响else {}部分。
提前致谢。
答案 0 :(得分:0)
如果你第一次调用函数isSuspect
,它首先检查$value
是否是一个数组(如果是),它遍历数组(foreach ($value as $item)
)...并调用该函数再次具有任何值。当最后$value
不再是一个数组时,它会进入else
部分。在那里,它会使用$value
检查模式,并将$suspect
设置为true
(如果匹配)。您现在可能会问自己,为什么$suspect
现在也在函数之外true
。好吧,看看功能的负责人。您注意到&$suspect
。这是通过引用传递。查看有关通过引用传递的手册:http://php.net/manual/en/language.references.pass.php。