我敢肯定,这肯定是在某个地方问过的,但我找不到答案:
您如何从本机 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);
。