用于检测可疑短语PHP的递归函数

时间:2016-07-20 05:48:18

标签: php forms recursion

我正在学习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 {}部分。

提前致谢。

1 个答案:

答案 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