php preg_replace_all 我需要定义 $matches 吗?
php preg_replace_all do I need to define $matches?
我通常使用 $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上的例子并没有提前定义变量。 "proper" 的方法是什么?我可以忽略 Netbeans
吗?
您可以安全地忽略 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;
}
忽略 NetBeans。正如你所说,PHP 手册没有定义变量,我已经在所有错误报告的情况下对其进行了测试,并且没有给出通知错误。
此外,我使用的 IDE PHPStorm 没有显示 $matches
变量的未定义错误。
我通常使用 $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上的例子并没有提前定义变量。 "proper" 的方法是什么?我可以忽略 Netbeans
吗?
您可以安全地忽略 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;
}
忽略 NetBeans。正如你所说,PHP 手册没有定义变量,我已经在所有错误报告的情况下对其进行了测试,并且没有给出通知错误。
此外,我使用的 IDE PHPStorm 没有显示 $matches
变量的未定义错误。