如何从本机php函数引用codeigniter函数名作为回调?

Ini*_*igo 3 php codeigniter

我确定在某个地方之前一定要问过,但我找不到答案:

如何从本机php函数的回调参数中引用Codeigniter函数的名称,例如array_map()

举个简单的例子,我的代码在我的内部CI_Controller:

function test(){
    $row = array('foo', 'bar');
    $new_row = array_map('do_the_mapping', $row);
    echo $new_row[0];
}

function do_the_mapping($row){
    return($row . $row);
}
Run Code Online (Sandbox Code Playgroud)

do_the_mapping()没有找到第二个功能.那么我该如何正确引用呢?

Mar*_*ark 10

因为do_the_mapping是一个对象的方法,而不是一个全局函数(这是你所暗示的使用array_map('do_the_mapping'...,你必须将数组传递给array_map第一个参数中的函数.

此数组必须包含两个项目,第一个(索引0)是对对象实例的引用,第二个(索引1)是方法名称的字符串表示形式.

例如,如果您的控制器类似于以下内容:

class Some_page extends CI_Controller {

    public function test()
    {
        $row = array('foo', 'bar');
        $new_row = array_map('do_the_mapping', $row);
        echo $new_row[0];
    }

    public function do_the_mapping($row)
    {
        return($row . $row);
    }

}
Run Code Online (Sandbox Code Playgroud)

你必须改变这个:

array_map('do_the_mapping', $row)
Run Code Online (Sandbox Code Playgroud)

对此:

array_map(array($this, 'do_the_mapping'), $row);
Run Code Online (Sandbox Code Playgroud)

如果要调用另一个对象的方法,只需更改$this为对该对象实例的引用即可.