如何引用代码点火器函数名称作为本机 php 函数的回调


How to reference a codeigniter function name as callback from native php function?

我敢肯定,这肯定是在某个地方问过的,但我找不到答案:

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

举个简单的例子,我的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);
}

do_the_mapping()没有找到第二个函数。那么如何正确引用它呢?

由于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);
    }
}

您必须更改此设置:

array_map('do_the_mapping', $row)

对此:

array_map(array($this, 'do_the_mapping'), $row);

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

我认为你不能像这样提供回调,因为do_the_mapping是控制器对象的函数。您必须根据文档将函数更改为静态:

<?php
class Foo extends CI_Controller {
    public static function do_the_mapping($row) {
        return ($row . $row);
    }
}

并像array_map("Foo::do_the_mapping", $row);一样称呼它.

[编辑] 更彻底地阅读文档,您不需要静态函数,但可以为回调提供对象:array_map(array($this, "do_the_mapping"), $row);