2015-07-20 5 views
7

किसी सरणी के लिए डिफ़ॉल्ट/फ़ॉलबैक मान को परिभाषित करने के लिए सबसे अच्छा अभ्यास क्या है?फ़ंक्शन पैरामीटर - सरणी डिफ़ॉल्ट मान | सर्वोत्तम अभ्यास

विवरण:

मेरे समारोह 2 पैरामीटर स्वीकार करता है। उनमें से एक चुनने के लिए विकल्पों की एक सरणी है। सरणी पारित नहीं किया गया है, यह उदाहरण के रूप में एक डिफ़ॉल्ट/फ़ॉलबैक मान है:

public function selectName($howMany = 1, $seed = ['john', 'bob', 'mark', 'cindy']){... 

समर्थन सवाल:

क) संगृहीत करना डिफ़ॉल्ट तर्क एक अच्छा विचार में सरणी भरा ?

बी) जो बेहतर होगा, स्थिर, array_merge, if(empty...?

+0

यह परिदृश्य पर निर्भर करता है, आप अनिवार्य रूप से पूछ रहे हैं कि बेहतर क्या है: सरणी को विलय करना या इसे फिर से परिभाषित करना। या मैंने गलत समझा है? – George

+0

@ जॉर्ज मुझे लगता है कि आप सही ढंग से समझ गए हैं। मुख्य प्रश्न यह होगा: डिफ़ॉल्ट फ़ंक्शन पैरामीटर के रूप में मानों के साथ एक सरणी संग्रहीत करना एक अच्छा विचार है। यदि अब - कौन सा समाधान सबसे अच्छा काम करेगा? –

+0

पैरामीटर परिभाषाओं में आपके डिफ़ॉल्ट मानों के साथ कुछ भी * गलत * नहीं है, इसमें केवल उन दोषों की कमी हो सकती है जिन्हें आप नहीं चाहते हैं। फिर, परिदृश्य विशिष्ट। – George

उत्तर

4

के बाद से मूलभूत मूल्यों अपने वस्तुओं के सभी के साथ साझा कर रहे हैं, यह उन्हें static रूप decalre बेहतर है।
protected के लिए दृश्यता को कम करना

class YourClass { 
    protected static $_DEFAULT_SEED  = array('john', 'bob', 'mark', 'cindy'); 
    protected static $_DEFAULT_QUANTITY = 1; 
    public function selectName($howMany = NULL, $seed = NULL){ 
     if (is_null($howMany)) { 
      $howMany = self::$_DEFAULT_QUANTITY; 
     } 
     if (is_null($seed)) { 
      $seed  = self::$_DEFAULT_SEED; 
     } 
     //... 
    } 
} 
+0

अगर मैं जोड़ूं (is_null ($ seed) ** ||! Is_array ($ seed) **) .... लेकिन समाधान मुझे – donald123

+0

से हटा देता है @ donald123 इसे बदलें और मैं इसे हल कर दूंगा :), सुसंगत रहने के लिए हमें जोड़ना चाहिए: 'अगर (is_null ($ seed) ||! is_integer ($ seed)) '... –

0

मेरी राय में, डिफ़ॉल्ट तर्कों में भरे सरणी को संग्रहीत करना एक अच्छा विचार नहीं है। क्या होगा यदि आप उस सरणी के साथ फ़ंक्शन को कॉल करते हैं जिसमें आपकी हर कुंजी की आवश्यकता नहीं है?

उदाहरण:

आप

(default): ['option1' => true, 'option2' => false] 
You call the function with: ['option1' => true] 

अब आप एक सरणी के साथ समारोह फोन है, लेकिन पर्याप्त कुंजी के साथ नहीं करना चाहता। तो मेरी राय में, array_merge() यहां सबसे अच्छा समाधान है।

1

बेहतर आप एक खाली सरणी को तर्क के रूप में पास करते हैं।

public function selectName($howMany = 1, $seed = array()){ 
    $myarr=['john', 'bob', 'mark', 'cindy']; 
    if(count($seed)>0){ 
     $myarr=$seed; 
    } 
    /* user $myarr now*/ 
} 
-1

की सिफारिश की है मेरी राय में, मैं समारोह में सीधे सरणी मान पास

<?php 
public function selectName($howMany = 1, $seed = false){ 
    $seed = (!$seed) ? array('john', 'bob', 'mark', 'cindy') : $seed; 
    // rest of the job ... 
} 

या यदि सरणी कई कार्य में प्रयोग किया जाता है, मैं इसे पारित एक कक्षा में इस तरह के

CONST SEED_DEFAULT_VALUE = array('john', 'bob', 'mark', 'cindy'); 

public function selectName($howMany = 1, $seed = false){ 
    $seed = (!$seed) ? self::SEED_DEFAULT_VALUE : $seed; 
    // rest of the job ... 
} 
+0

एआरएस को स्थिरांक के रूप में अनुमति नहीं है –

+3

@ JordiMartín php> = 5.6 आप सरणी का उपयोग कर सकते हैं http://php.net/manual/en/language.constants.syntax.php – donald123

+0

@ donald123 सच है! साझा करने के लिए धन्यवाद। –

1

मैं ऐसा करूँगा। इस तरह के मामले में आप केवल पैराम सेट कर सकते हैं, आप

function f($array = null) { 
    $params = array('a' => '1', 'b' => '2'); // default params 
    if ($array) $params = array_replace($params, $array); 
    foreach($params as $k => $v) 
    echo "$k => $v \n"; 
} 

f(); // a => 1 b => 2 
f(array('b' => "new")); // a => 1 b => new 
+0

अगर ($ सरणी) {...} के बजाय अगर (is_array ($ array)) {...} समस्याओं से बचने के लिए उपयोग करें –

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