आमतौर पर, जब आप किसी तृतीय पक्ष API के साथ संचार कर रहे होते हैं या जब विधि/सदस्य संरचना अस्पष्ट होती है तो वे विधियां उपयोगी होती हैं।
मान लें कि आप एक सामान्य XML-RPC wrapper लिख रहे हैं। चूंकि आप डब्लूडीएल फ़ाइल डाउनलोड करने से पहले आपके लिए उपलब्ध विधियों को नहीं जानते हैं, इसलिए ओवरलोडिंग का उपयोग करना समझ में आता है।
तब, निम्न लेखन के बजाय:
$xmlrpc->call_method('DoSomething', array($arg1, $arg2));
आप उपयोग कर सकते हैं:
$xmlrpc->DoSomething($arg1, $arg2);
जो एक और अधिक प्राकृतिक वाक्य रचना है।
आप सदस्य ओवरलोडिंग का उपयोग वैरिएबल ऑब्जेक्ट्स के लिए विधि अधिभार के रूप में भी कर सकते हैं।
केवल एक चीज जिसके लिए आप देखना चाहते हैं: इसके उपयोग को केवल चर-संरचना वस्तुओं के लिए सीमित करें या केवल गेटर्स और सेटर्स के लिए सिंटैक्टिकल शॉर्टकट के लिए इसका उपयोग करें। यह भावना अपनी कक्षा एक से अधिक तरीकों में व्यापार तर्क अलग करने में getters और setters रखने के लिए करता है, लेकिन एक शॉर्टकट के रूप में उपयोग में कोई बुराई नहीं है:
class ShortcutDemo {
function &__get($name) {
// Usually you want to make sure the method
// exists using method_exists, but for sake
// of simplicity of this demo, I will omit
// that logic.
return call_user_method('get'.$name, $this);
}
function __set($name, &$value) {
return call_user_method('set'.$name, $this, $value);
}
private $_Name;
function &getName() { return $this->_Name; }
function setName(&$value) { $this->_Name = $value; }
}
इस तरह आप को मान्य करने के अपने getters और setters उपयोग जारी रख सकते और अपने डेटा सेट, और अभी भी इस तरह के रूप वाक्यात्मक शॉर्टकट का उपयोग:
$shortcut->Name = 'Hello';
स्रोत
2009-08-11 20:38:29
हालांकि मैं अभी तक गेटर्स और सेटर्स से छुटकारा नहीं पाउंगा। विभिन्न व्यक्तिगत गुणों के लिए व्यवसाय नियम युक्त कई विधियां आमतौर पर बनाए रखने और डीबग करना आसान होती हैं, फिर एक विशाल विधि जिसमें सभी गुणों के लिए सभी व्यावसायिक नियम होते हैं। मैं 'getX', 'setX' को कॉल करने के शॉर्टकट तरीके के लिए' __get()' और '__set()' का उपयोग करूंगा। ऑब्जेक्ट अधिभार उपयोग केवल परिवर्तनीय संरचना वस्तुओं के लिए रखा जाना चाहिए। –
मेरा अद्यतन संस्करण पढ़ें। –
हालांकि, यह वास्तव में सी # प्राप्त/सेट संपत्ति की तरह काम नहीं करता है। कम से कम लचीला नहीं, अगर आप सेट किए जा रहे हैं या सत्यापित करना चाहते हैं। – Extrakun