操作方法将数组传递给使用func_get_args检索参数的函数

时间:2013-02-28 21:57:46

标签: php

我编程的API方法接受可变数量的参数。 API方法(见下文)使用func_get_args。我正在包装API,并希望能够传递关联数组,而不是将数组的键/值作为参数传递;即filter(key1,value1,key2,value2 ...)

我有API的源代码访问权限,但遗憾的是我无法更改源代码 我查看了call_user_func_array,我认为应该/将一个数组作为一组参数传递(尽管不是关联数组)。 filter是一个对象的方法 - 我不知道如何将方法作为回调传递。我也不知道是否有一种干净的方式来包装这个API。任何和所有的帮助表示赞赏。

<?php

public function &filter() {
        $filter = new QueryFilter($this->queryhandler, $this);
        $args = func_get_args();
        $filter->applyFilter($this->getFilters($args));
        return $filter;
    }

1 个答案:

答案 0 :(得分:4)

你可以有一个包装器,它接受一个数组并“展平”键和值:

function wrapper(array $params) {
    $flat = array();
    foreach ($params as $k => $v) {
        $flat[] = $k;
        $flat[] = $v;
    }

    return call_user_func_array('filter', $flat);
}

以上假设filter是一个自由函数,在您的情况下不是真的。要将方法指定为回调,请使用array($object, 'filter')call_user_func_array语法在filter上调用方法$object