【问题标题】:php preg_replace_all do I need to define $matches?php preg_replace_all 我需要定义 $matches 吗?
【发布时间】:2015-06-30 20:18:36
【问题描述】:

我通常使用$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吗?

【问题讨论】:

    标签: php netbeans pass-by-reference


    【解决方案1】:

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

    在使用之前声明变量可能被认为是一种很好的方式,即使这些变量是仅输出的。 PHP 不在乎:即使 $matches 之前不存在,PHP 也会覆盖它:

    $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;
    }
    

    【讨论】:

      【解决方案2】:

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

      另外,我使用的 IDE PHPStorm 没有为 $matches 变量显示未定义的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多