我确信在某个地方之前一定要问这个问题,但我找不到答案:
如何从本机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);
}
do_the_mapping()
没有找到第二个功能。那么如何正确引用呢?
答案 0 :(得分:9)
由于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
更改为对该对象实例的引用。
答案 1 :(得分:2)
我认为你不能像这样提供回调,因为do_the_mapping
是控制器对象的一个功能。您必须根据documentation:
<?php
class Foo extends CI_Controller {
public static function do_the_mapping($row) {
return ($row . $row);
}
}
并将其称为array_map("Foo::do_the_mapping", $row);
。
[edit]更彻底地阅读documentation,您不需要静态函数,但可以将对象提供给回调:array_map(array($this, "do_the_mapping"), $row);
。