आप php में वैकल्पिक तर्क कैसे बनाते हैं?


189

PHP मैनुअल में, वैकल्पिक मापदंडों के साथ फ़ंक्शन के लिए सिंटैक्स दिखाने के लिए, वे निर्भर वैकल्पिक पैरामीटर के प्रत्येक सेट के आसपास कोष्ठक का उपयोग करते हैं। उदाहरण के लिए, date()फ़ंक्शन के लिए, मैनुअल पढ़ता है:

string date ( string $format [, int $timestamp = time() ] )

जहां $timestampएक वैकल्पिक पैरामीटर है, और जब खाली छोड़ दिया जाता है, तो यह time()फ़ंक्शन के रिटर्न मान में चूक करता है।

PHP में एक कस्टम फंक्शन को परिभाषित करते समय आप इस तरह के वैकल्पिक पैरामीटर बनाने के बारे में क्या सोचते हैं?

जवाबों:


253

मैनुअल की तरह, =मापदंडों की अपनी परिभाषा में एक बराबर ( ) चिह्न का उपयोग करें:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

function dosomething($var1, $var2, $optionalValue = null)मुझे यह बेहतर विकल्प लगा।
मोहम्मद जैद पठान

52

तर्क का डिफ़ॉल्ट मान एक स्थिर अभिव्यक्ति होना चाहिए। यह एक चर या फ़ंक्शन कॉल नहीं हो सकता।

आप इस कार्यक्षमता की जरूरत है, हालांकि:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

मान लिया $barजाना निश्चित रूप से एक बूलियन होने की उम्मीद नहीं है।


1
हालाँकि, यह मूल्यांकन करेगा यदि 0 या "झूठा" $ बार में पारित किया गया था।
टाइजॉइड

33
नल एक बेहतर डिफ़ॉल्ट है।
क्ज़कई

3
@DooMMasteR, यहाँ, आपका मतलब है $bar === false- यह एक ऐसी क्रिया है जिसे $barडिफ़ॉल्ट होने पर किया जाना चाहिए false। इसमें 0पास होने पर गलत कार्रवाई से बचना होगा , इसलिए यह काम करता है - UNLESS एक बूलियन की आवश्यकता है। जैसा कि कजकाई ने कहा, एक अधिक सामान्य समाधान का उपयोग करना है $bar = null, क्योंकि इसका उपयोग तब भी किया जा सकता है जब $ बार के मूल्य बूलियन होते हैं। परीक्षण तो if (is_null($bar))या हो जाता है if ($bar === null)
टूलमेकरसैट

22

कुछ नोट जो मुझे उपयोगी लगे:

  • अपने डिफ़ॉल्ट मानों को दाईं ओर रखें।

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • तर्क का डिफ़ॉल्ट मान एक स्थिर अभिव्यक्ति होना चाहिए। यह एक चर या फ़ंक्शन कॉल नहीं हो सकता।


14

वैकल्पिक तर्क को एक डिफ़ॉल्ट मान दें।

function date ($format, $timestamp='') {
}

10

दिनांक फ़ंक्शन को कुछ इस तरह परिभाषित किया जाएगा:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

आमतौर पर, आप इस तरह से डिफ़ॉल्ट मान डालेंगे:

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

हालाँकि, केवल शाब्दिक मान्य डिफ़ॉल्ट तर्क हैं, यही कारण है कि मैंने nullपहले उदाहरण में डिफ़ॉल्ट तर्क के रूप में उपयोग किया , नहीं $timestamp = time() , और इसे एक अशक्त जांच के साथ जोड़ा। साहित्य में सरणियाँ ( array()या []), बूलियन, संख्या, तार और शामिल हैं null


8

यदि आपको पता नहीं है कि कितनी विशेषताओं को संसाधित करने की आवश्यकता है, तो आप ...PHP 5.6 में पेश किए गए वेरिएडिक तर्क सूची टोकन ( ) का उपयोग कर सकते हैं ( यहां पूर्ण प्रलेखन देखें )।

वाक्य - विन्यास:

function <functionName> ([<type> ]...<$paramName>) {}

उदाहरण के लिए:

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

जैसा कि आप देख सकते हैं, यह टोकन मूल रूप से सभी मापदंडों को एक सरणी में बदल देता है, जिसे आप किसी भी तरह से संसाधित कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.