php preg_replace_all我需要定义$ matches吗?

时间:2015-06-30 20:18:36

标签: php netbeans pass-by-reference

我通常使用$pattern$subject$matches调用preg_match_all,例如

preg_match_all("/\S/","words",$matches);

但是,我的IDE (Netbeans)对我大吼大叫,因为$matches(通过引用传递并将被分配preg_match_all的结果)未定义,所以它不希望我将其作为参数传递。它很满意:

$matches=[];
preg_match_all("/\S/","words",$matches);

然而,这似乎是多余的,而php.net上的示例并未提前定义变量。这样做的“正确”方法是什么?我可以忽略Netbeans吗?

2 个答案:

答案 0 :(得分:2)

您可以放心地忽略Netbeans,或者configure Netbeans可以少抱怨。

在使用之前声明变量可能被认为是好的风格,即使这些变量仅是输出。 PHP并不在乎:即使它不存在,PHP也会覆盖$matches之前的任何内容:

$matches = new StdClass();
$ok = preg_match_all('/foo/', "foo bar", $matches);
var_dump($ok, $matches);

用户定义的是好的还是坏的。 :)

最后,您可以考虑一个帮助函数,它既会停止Netbeans,也会减少您的输入:

function get_matches($pattern, $subject, $options = null) {
    $matches = array ();
    preg_match_all($pattern, $subject, $matches, $options);
    return $matches;
}

答案 1 :(得分:1)

忽略NetBeans。正如您所说,PHP手册没有定义变量,我已经对所有错误报告进行了测试,并且没有给出通知错误。

此外,我使用的IDE PHPStorm并未显示$matches变量的未定义错误。