如何将call_user_func与params一起使用?

时间:2015-06-07 23:50:12

标签: arrays function callback

我从来没有想过遇到这个问题,但我在这里找不到办法。

我有一个映射器数组,其中的键应该(或称为)函数。 但我总是得到这个错误:

  

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”并用数组封装它。

1 个答案:

答案 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);
    }
}