【发布时间】:2015-06-07 23:50:11
【问题描述】:
我从没想过会遇到这个问题,但我无法独自在这里找到方法。
我有一个映射器数组,其中的键应该(或调用)是函数。 但是我一直都遇到这个错误:
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”并用数组封装它。
【问题讨论】:
-
尝试创建一个返回
return key(self::$_mapper);的函数 -
call_user_func不会检查它是否从类方法中调用。所以你必须提供上下文。这就是为什么您需要在数组中添加$this。查看manual 的可调用对象。 -
"但是我仍然不知道为什么我必须添加 "$this" 并用数组封装它。" - 解释器不知道应该调用给定方法的对象。