PHP

2013-03-30 3 views
5

में फ़ंक्शन के लिए एसोसिएटिव ऐरे पास करें मुझे पता है कि पैरामीटर घोषित करने के लिए एक सहयोगी सरणी का उपयोग करके फ़ंक्शन को कॉल करने का कोई तरीका है या नहीं।PHP

function test($hello, $world) { 
    echo $hello . $world; 
} 

वहाँ किसी तरह यह कुछ इस तरह कर रही कॉल कर सकता:

उदाहरण के लिए अगर मैं इस समारोह है?

call('test', array('hello' => 'First value', 'world' => 'Second value')); 

मैं call_user_func और call_user_func_array उपयोग करने से परिचित हूँ, लेकिन मैं अधिक सामान्य है कि मैं विभिन्न तरीकों कॉल करने के लिए जब मैं नहीं जानता कि क्या पैरामीटर वे समय से आगे के लिए देख रहे हैं का उपयोग कर सकते कुछ के लिए देख रहा हूँ।

संपादित करें: इसका कारण एपीआई फ्रंट एंड के लिए एक इंटरफेस बनाना है। मैं JSON स्वीकार कर रहा हूं और इसे एक सरणी में परिवर्तित कर रहा हूं। इसलिए, मैं विभिन्न तरीकों को बुलाया जाना चाहता हूं और जेएसओएन इनपुट से मानों को विधियों में पास करना चाहता हूं। चूंकि मैं इस इंटरफेस से अलग-अलग तरीकों के वर्गीकरण को कॉल करने में सक्षम होना चाहता हूं, इसलिए मैं बिना किसी आदेश के पैरामीटर को पैरामीटर पास करने का एक तरीका चाहता हूं कि मुझे किस क्रम में होना चाहिए। मुझे लगता है कि प्रतिबिंबों का उपयोग करने से मुझे परिणाम मिलेंगे। मैं देख रहा हूँ

+0

क्या कोई कारण है * क्यों * आप यह करना चाहते हैं? –

+0

यह एक एपीआई फ्रंट एंड के लिए है। मैं JSON स्वीकार कर रहा हूं और इसे एक सरणी में परिवर्तित कर रहा हूं। इसलिए, मैं विभिन्न तरीकों को बुलाया जाना चाहता हूं और जेएसओएन इनपुट से मानों को विधियों में पास करना चाहता हूं। – cbulock

उत्तर

2

के लिए php मैनुअल की जाँच करें आप अपने कार्यों func_get_args()

तो इस फ़ंक्शन आंतरिक उपयोग कर सकते हैं, तो आप इस तरह इसका इस्तेमाल कर सकते हैं:

function test() { 
    $arg_list = func_get_args(); 
    echo $arg_list[0].' '.$arg_list[1]; 
} 

test('hello', 'world'); 
2
पीएचपी साथ

5.4+, यह

function test($assocArr){ 
    foreach($assocArr as $key=>$value){ 
    echo $key . ' ' . $value . ' '; 
    } 
} 

test(['hello'=>'world', 'lorem'=>'ipsum']); 
0

निम्नलिखित कार्य करना चाहिए ...

function test($hello, $world) { 
    echo $hello . $world; 
} 

$callback = 'test'; <-- lambdas also work here, BTW 

$parameters = array('hello' => 'First value', 'world' => 'Second value'); 

$reflection = new ReflectionFunction($callback); 
$new_parameters = array(); 

foreach ($reflection->getParameters() as $parameter) { 
    $new_parameters[] = $parameters[$parameter->name]; 
} 

$parameters = $new_parameters; 

call_user_func_array($callback, $parameters); 
संबंधित मुद्दे