2010-01-22 14 views
10

क्या PHP में फ़ंक्शन को परिभाषित करने का कोई तरीका है जो आपको चरम सीमाओं को परिभाषित करने देता है?PHP: परिवर्तनीय पैरामीटर गिनती के साथ फ़ंक्शन को परिभाषित करें?

भाषा मैं इसके साथ अधिक परिचित हूँ में तो की तरह है:

function myFunction(...rest){ /* rest == array of params */ return rest.length; } 

myFunction("foo","bar"); // returns 2; 

धन्यवाद!

उत्तर

32

हां। func_num_args() और func_get_arg() का प्रयोग तर्क पाने के लिए:

<?php 
    function dynamic_args() { 
     echo "Number of arguments: " . func_num_args() . "<br />"; 
     for($i = 0 ; $i < func_num_args(); $i++) { 
      echo "Argument $i = " . func_get_arg($i) . "<br />"; 
     } 
    } 

    dynamic_args("a", "b", "c", "d", "e"); 
?> 

पीएचपी में आप अब उपयोग कर सकते हैं 5.6+ variadic functions:

<?php 
    function dynamic_args(...$args) { 
     echo "Number of arguments: " . count($args) . "<br />"; 
     foreach ($args as $arg) { 
      echo $arg . "<br />"; 
     } 
    } 

    dynamic_args("a", "b", "c", "d", "e"); 
?> 
+2

यकीन है कि 'func_get_args () 'वही है जो आप वास्तव में इस वर्बोज़ पहले समाधान के बजाय उपयोग करना चाहते हैं। – Toskan

0

मैं अपने कार्य में एक सरणी पारित करने के लिए प्रोत्साहित करते हैं, कि जिस तरह से आप कर सकते हैं उस सरणी में संग्रहीत कई अलग-अलग पैरामीटर के रूप में। आपके द्वारा आवश्यक सही जानकारी प्राप्त करने के लिए फ़ंक्शन में एक बार सरणी पर कई ऑपरेशन कर सकते हैं।

$array = array(); 
$array[0] = "a"; 
$array[1] = 1; 

myFunction($array); 
6

आप इतने लंबे समय के सभी घोषित तर्क को भरने के लिए पर्याप्त नहीं है के रूप में, किसी भी कार्य करने के लिए तर्क के परिवर्तनशील स्वीकार कर सकते हैं।

<?php 

function test ($a, $b) { } 

test(3); // error 
test(4, 5); // ok 
test(6,7,8,9) // ok 

?> 

अतिरिक्त संयुक्त राष्ट्र के नाम तर्क test() के लिए पारित पहुँचने के लिए आपको कार्यों func_get_args(), func_num_args(), और func_get_arg($i) का उपयोग करें:

<?php 

// Requires at least one param, $arg1 
function test($arg1) { 

    // func_get_args() returns all arguments passed, in order. 
    $args = func_get_args(); 

    // func_num_args() returns the number of arguments 
    assert(count($args) == func_num_args()); 

    // func_get_arg($n) returns the n'th argument, and the arguments returned by 
    // these functions always include those named explicitly, $arg1 in this case 
    assert(func_get_arg(0) == $arg1); 

    echo func_num_args(), "\n"; 
    echo implode(" & ", $args), "\n"; 

} 

test(1,2,3); // echo "1 & 2 & 3" 

?> 
1

मैं अपने पीएचपी मानकों के साथ एक जावास्क्रिप्ट-esque दृष्टिकोण लेना चाहते । यह "विकल्प" और उनके डिफ़ॉल्ट (जो मैं क्षणिक रूप से देखता हूं) की बेहतर सेटिंग के लिए अनुमति देता है। उदाहरण के लिए, मान लीजिए कि आपके पास एक ऐसा फ़ंक्शन है जो किसी सरणी में कई बार लौटाता है। पैरामीटर 1 प्रारंभ समय है, पैरामीटर 2 अंत समय है, पैरामीटर 3 समय अंतराल है, और इसके बाद कोई भी विकल्प वैकल्पिक है (जैसे "प्रारूप" => "24-घंटे", "include_seconds" => TRUE इत्यादि।)।

मैं इस तरह समारोह निर्धारित करना होगा:

function returnTimeInterval($startTime, $endTime, $interval, $options = array()) 
{ 
    // the first thing to do is merge options in with our defaults 
    $options = array_merge(array(
     "format" => "24-hour", 
     "include_seconds => TRUE 
     // etc. 
    ), $options); 

इस समारोह है कि तब अधिरोहित जा सकता है, जो बहुत अच्छा है के भीतर चूक की स्थापना के लिए अनुमति देता है। बेशक, आपको ध्यान रखना होगा कि अजीब, अप्रयुक्त विकल्प पास नहीं किए गए हैं, लेकिन मैं इसे आपके पास छोड़ दूंगा। :)

+0

'array_intersect_key()' अज्ञात विकल्पों से बचने में मदद करेगा। – Walf

2

या सिर्फ

function printArgs() { 

foreach (func_get_args() as $arg){ 
    echo $arg; 
} 
} 

printArgs("1 ", "2 ", "three "); 

आउटपुट 1 2 three

2

हालांकि इस सवाल का बहुत पुराना है: PHP में असल 5.6+ कि वास्तव में आप लिख सकते हैं कि तुम क्या लिखा है: डी

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