如何传递一个数组给一个函数,该函数使用func_get_args来检索参数


How-To Pass an array to a function which uses func_get_args to retrieve parameter

我正在编写一个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;
    }

您可以有一个包装器,它接受一个数组并"扁平化"键和值:

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$object上调用filter方法。