2009-05-06 12 views
26

अरे, मैं एक PHP फ़ंक्शन के साथ काम कर रहा था जो कई तर्क लेता है और उन्हें स्वरूपित करता है। वर्तमान में, मैं कुछ इस तरह के साथ काम कर रहा हूँ:PHP सभी तर्कों को सरणी के रूप में प्राप्त करें?

function foo($a1 = null, $a2 = null, $a3 = null, $a4 = null){ 
    if ($a1 !== null) doSomethingWith($a1, 1); 
    if ($a2 !== null) doSomethingWith($a2, 2); 
    if ($a3 !== null) doSomethingWith($a3, 3); 
    if ($a4 !== null) doSomethingWith($a4, 4); 
} 

लेकिन अगर मैं इस तरह एक समाधान का उपयोग कर सकते मैं सोच रहा था:

function foo(params $args){ 
    for ($i = 0; $i < count($args); $i++) 
     doSomethingWith($args[$i], $i + 1); 
} 

लेकिन फिर भी समारोह उसी तरह, के लिए इसी तरह आह्वान सी # में कीवर्ड या जावास्क्रिप्ट में तर्क सरणी पैरामीटर।

उत्तर

60

func_get_args वर्तमान फ़ंक्शन के सभी तर्कों के साथ एक सरणी देता है।

+0

एक पकड़ लिया; आप इसे किसी अन्य फ़ंक्शन कॉल में पास नहीं कर सकते हैं। – Rob

+4

@Rob यदि आप '$ args = func_get_args()' और फिर 'call_user_func_array ($ func, $ args)' – alex

+1

func_get_args() केवल उन पैरामीटर के मान लौटाते हैं जो फ़ंक्शन कॉल पर PASSED थे, सभी पैराम परिभाषित नहीं हैं समारोह परिभाषा में। –

6

या पीएचपी के रूप में 7.1 आप अब iterable

नामक एक प्रकार संकेत का उपयोग करने में सक्षम हैं
function f(iterable $args) { 
    foreach ($args as $arg) { 
     // awesome stuff 
    } 
} 

इसके अलावा, इसका उपयोग Traversable के बजाय किया जा सकता है जब आप इंटरफ़ेस का उपयोग करते हैं। इसके साथ ही इसे जेनरेटर के रूप में भी इस्तेमाल किया जा सकता है जो पैरामीटर उत्पन्न करता है। func_get_args कि उनका कहना है लायक है साथ

Documentation

संबंधित मुद्दे