2013-02-28 28 views
5

我正在編寫一個接受可變數量參數的API方法。 API方法(見下文)使用func_get_args。我正在封裝API,並希望能夠傳遞關聯數組而不是將數組的鍵/值作爲參數傳遞;即filter(key1,value1,key2,value2 ...)如何將數組傳遞給使用func_get_args檢索參數的函數

我有源代碼訪問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; 
    } 
+0

'key1','key2'等是怎麼處理的? 'func_get_args'提供了一個數字索引的數組,其中的鍵是預定義的。 – Jon 2013-02-28 22:02:36

+0

現在它是有道理的。添加了一個答案。 – Jon 2013-02-28 22:12:51

+0

函數'filter'獲取數據庫字段名稱和字段值。這就是爲什麼我更喜歡使用關聯數組。關聯數組需要被操作,所以鍵和值將會在一個非關聯數組中,例如採取數組('key1'=>'value1','key2'=>'value2')並且創建數組('key1' 'value1','key2','value2'..),我可以做,但我不知道如何將該方法作爲回調函數傳遞。我不確定call_user_func_array是否是正確的方法。 – 2013-02-28 22:16:24

回答

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調用$object上的方法filter

相關問題