2011-05-18 8 views
9

यदि आपके पास एक ही बेस क्लास को विस्तारित करने वाले दो वर्ग हैं, और उनमें से एक को अतिरिक्त पैरामीटर लेने के लिए फ़ंक्शन को ओवरराइड करने की आवश्यकता है। क्या किसी भी वर्ग पर फ़ंक्शन को कॉल करते समय हमेशा अतिरिक्त पैरामीटर पास करना ठीक है?क्या आप किसी फ़ंक्शन की अपेक्षा से अधिक पैरामीटर पास कर सकते हैं?

छद्म कोड मदद करने के लिए प्रदर्शित की एक बिट ...

हम 3 वर्गों और कार्यों

  • foo :: DoSomething()
  • foo_subclass_one :: DoSomething()
  • है
  • foo_subclass_two :: DoSomething ($ इनपुट)

और मैं इन तीन में से एक का एक उदाहरण है, मैं कैलोरी कर सकते हैं एल $ instance.do कुछ ($ इनपुट)

I -think- क्या होता है कि foo और foo_subclass_one केवल अतिरिक्त पैरामीटर को अनदेखा कर देगा और foo_subclass_two इसका उपयोग करेगा। क्या ये सही है? क्या मेरे पास ऐसा कोई बेहतर तरीका है यदि मेरे पास बहुत से सबक्लास हैं और वास्तव में 10+ फ़ाइलों को छूने से बचना चाहते हैं?

धन्यवाद!

उत्तर

16

हाँ आप कर सकते हैं। उन लोगों के साथ इकट्ठा func_get_args()

4

ऐसा करने के दो तरीके हैं:

बढ़ाएँ तरीकों डिफ़ॉल्ट पैरामीटर का उपयोग करने के लिए:

public function doSomething($input=null) {} 

ध्यान दें कि आप सभी उदाहरणों के लिए यह करने के लिए की आवश्यकता होगी, भले ही इसका उपयोग नहीं किया जाता है।

public function doSomething() { 
    $args = func_get_args(); 
    if (isset($args[0])) { $this->doSomethingElse(); 
} 
:

इस मामले में, आप विधि के तर्कों सरणी का उपयोग कर सकते