preg_replace_callback() - 当前对象实例内的Calback

loc*_*ost 0 php

警告:preg_replace_callback()[function.preg-replace-callback]:需要参数2,'info',才能成为[...]中的有效回调

public function getDisplay(){
    $info = array_merge($this->info,array());

    return  preg_replace_callback('!\{\{(\w+)\}\}!', 'info', $this->display);
}
Run Code Online (Sandbox Code Playgroud)

在"MyClass"的公共函数中,当我从另一个类移动到此类时停止工作.这是:

public function getEdit( $type){
    $all_info = $this->info;

    return preg_replace_callback('!\{\{(\w+)\}\}!', 'all_info', $edit_contents);
}
Run Code Online (Sandbox Code Playgroud)

两者都被清理干净了,现在我不能用以前的课程重新测试,因为它已经很久了.

我敢肯定,使用变量是容许的,但它是工作,所以我无言以对.

当我这样做时,正如某些stackoverflow线程中所建议的那样,但显然它不是在对象中使用的:

public function getDisplay(){
    $display_info = $this->info;

    function display_info($matches) {
        global $display_info;
        return $display_info[$matches[1]];
    }

    return  preg_replace_callback('!\{\{(\w+)\}\}!', 'display_info', $this->display);
}
Run Code Online (Sandbox Code Playgroud)

所以我需要一些爱和指导cuz php本周让我疯狂...

Tad*_*eck 11

您可以使用支持传递回调的方法之一,而不是使用匿名函数或更复杂的方法(请参阅回调文档):

实例化对象的方法作为包含索引0处的对象和索引1处的方法名称的数组传递.

要将当前对象的"info"方法作为回调传递,请执行以下操作:

array($this, 'info')
Run Code Online (Sandbox Code Playgroud)

并将其传递给您想要使用"info"方法作为其中一个对象内的其他方法的回调.