我正在编写一个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
方法。