जैसा कि ऊपर उल्लेख किया गया है, आप मापदंडों को छोड़ नहीं पाएंगे। मैंने यह उत्तर कुछ परिशिष्ट प्रदान करने के लिए लिखा है, जो एक टिप्पणी में रखने के लिए बहुत बड़ा था।
@ फ्रेंक नोके अपने डिफ़ॉल्ट मापदंडों के साथ फ़ंक्शन को कॉल करने का प्रस्ताव करता है, इसलिए उदाहरण के लिए
function a($b=0, $c=NULL, $d=''){ //...
आपको उपयोग करना चाहिए
$var = a(0, NULL, 'ddd');
जो कार्यात्मक रूप से पहले दो ( $b
और $c
) मापदंडों को छोड़ने के समान होगा ।
यह स्पष्ट नहीं है कि कौन से चूक हैं ( 0
डिफ़ॉल्ट मान प्रदान करने के लिए टाइप किया गया है, या क्या यह महत्वपूर्ण है?)।
एक खतरा यह भी है कि डिफ़ॉल्ट मान समस्या बाहरी (या अंतर्निहित) फ़ंक्शन से जुड़ी होती है, जब डिफ़ॉल्ट मान फ़ंक्शन (या विधि) लेखक द्वारा बदला जा सकता है। इसलिए यदि आप कार्यक्रम में अपना कॉल नहीं बदलते हैं, तो आप अनजाने में इसका व्यवहार बदल सकते हैं।
कुछ वर्कअराउंड कुछ वैश्विक स्थिरांक को परिभाषित करने के लिए हो सकते हैं, जैसे DEFAULT_A_B
कि "फ़ंक्शन ए के बी पैरामीटर का डिफ़ॉल्ट मान" और "इस तरह" पैरामीटर को छोड़ना होगा:
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
यदि आप वर्ग स्थिरांक को परिभाषित करते हैं, तो कक्षाओं के लिए यह आसान और अधिक सुरुचिपूर्ण है, क्योंकि वे वैश्विक दायरे का हिस्सा हैं, उदाहरण के लिए।
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
// method body
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.
ध्यान दें कि यह डिफ़ॉल्ट स्थिरांक पूरे कोड में एक बार ठीक से परिभाषित किया गया है (विधि घोषणा में भी कोई मूल्य नहीं है), इसलिए कुछ अप्रत्याशित परिवर्तनों के मामले में, आप हमेशा सही डिफ़ॉल्ट मान के साथ फ़ंक्शन / विधि की आपूर्ति करेंगे।
इस समाधान की स्पष्टता निश्चित रूप से कच्चे डिफ़ॉल्ट मूल्यों (जैसे NULL
, 0
आदि) की आपूर्ति से बेहतर है जो एक पाठक को कुछ नहीं कहते हैं।
(मैं मानता हूं कि कॉलिंग $var = a(,,'ddd');
सबसे अच्छा विकल्प होगा)