我从来没有想过遇到这个问题,但我在这里找不到办法。
我有一个映射器数组,其中的键应该(或称为)函数。 但我总是得到这个错误:
call_user_func()期望参数1是有效的回调
class Myclass
{
protected static $_mapper = array(
'setFuncA' => 'somethingWithA',
'setFuncB' => 'somethingWithB'
);
public function getData() {
$params = $this->getRequest()->getParams();
// $params looks like
// array('somethingWithA' => 'someValue')
foreach ($params as $key => $value) {
if (in_array($key, self::$_mapper)) {
call_user_func(key(self::$_mapper), $params); // e.g. call_user_func('setFuncA', 'somethingWithA')
}
}
// do something;
}
public function somethingWithA($args) {
// do something
}
}
我在这里缺少什么?我也尝试使用call_user_func_array(),但也出错了。
解决
好的,发现了我的问题
我不得不打电话给
call_user_func(array($this, key(self::$_mapper)), $params);
这终于奏效了 但我仍然不知道为什么我必须添加“$ this”并用数组封装它。
答案 0 :(得分:0)
class Myclass
{
protected static $_mapper = array(
'setFuncA' => 'somethingWithA',
'setFuncB' => 'somethingWithB'
);
public function getData() {
$params = $this->getRequest()->getParams();
// $params looks like
// array('somethingWithA' => 'someValue')
foreach ($params as $key => $value) {
if (in_array($key, self::$_mapper)) {
call_user_func_array('myExtraFunc', $params);
}
}
// do something;
}
public function somethingWithA($args) {
// do something
}
public static function myExtraFunc() {
return key(self::$_mapper);
}
}