5

可変数の引数を受け入れるAPIメソッドにプログラミングしています。APIメソッド(以下を参照)はfunc_get_argsを使用します。APIをラップしていますが、配列のキー/値をパラメーターとして渡す代わりに、連想配列を渡すことができるようにしたいと考えています。すなわちfilter(key1,value1,key2,value2 ...)

APIにソースコードでアクセスできますが、残念ながらソースを変更できません。私はcall_user_func_array
を見てきました。これは、配列を引数のセットとして渡す必要がある/渡すと信じています(連想配列ではありませんが)。 オブジェクトのメソッドです-メソッドをコールバックとして渡す方法がわかりません。このAPIをラップするクリーンな方法があるかどうかもわかりません。ありとあらゆる助けをいただければ幸いです。filter

<?php

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

1 に答える 1

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')withを使用してでメソッドをcall_user_func_array呼び出します。filter$object

于 2013-02-28T22:12:28.173 に答える