如何为php7将preg_replace转换为preg_replace_callback

时间:2018-09-04 16:19:58

标签: php preg-replace-callback

我正在迁移php网站并获得以下声明

“ preg_replace():不再支持/ e修饰符,请使用preg_replace_callback”。

当更改为preg_replace_callback时,收到错误消息“ preg_replace_callback():要求参数2'$ this->('\ 1')'为有效的回调”。

代码:

function getFile($filename)
{
    if ($filename{0} == '/' && substr($this->fileRoot, -1) == '/') {
        $filename = substr($filename, 1);
    }

    $filename = $this->fileRoot . $filename;

    if (!($fh = @fopen($filename, 'r'))) {
        $this->err[] = PEAR::raiseError(
            $this->errorMessage(IT_TPL_NOT_FOUND) . ': "' .$filename .'"',
            IT_TPL_NOT_FOUND
        );
        return "";
    }

    $fsize = filesize($filename);
    if ($fsize < 1) {
        fclose($fh);
        return '';
    }

    $content = fread($fh, $fsize);
    fclose($fh);

    return preg_replace(
        "#<!-- INCLUDE (.*) -->#ime",
        "\$this->$getFile('\\1')",
        $content
    );

} // end func getFile

    /** change from preg_replace to preg_replace_callback */
    return preg_replace_callback(
        "#<!-- INCLUDE (.*) -->#ime",
        "\$this->$getFile('\\1')",
        $content

谢谢。

2 个答案:

答案 0 :(得分:0)

请参见以下小代码以确保是preg_replace_callback()。

var l = window.location;
var c = l;
var t = c.assign;
t('...');

答案 1 :(得分:0)

首先,因为错误消息表明变量$this->$getfile在任何地方都不存在。您必须查看代码的这一部分。

第二根据您的代码和对$this的使用,我们可以推断出您的函数为non-static method。因此,对于您来说,有效的callback可以是array中的object(作为第一项)和方法(作为第二项) 您的情况array应该是[$this,"name_of_your_method_here"]

看看callbacks以获得更多信息。