PHP में _get और _set फ़ंक्शंस निर्मित हैं। क्या यह प्रत्येक चर के लिए अपना स्वयं का काम लिखना और सेट करना बेहतर है या यदि किसी और के टन के साथ अंतर्निहित कार्यों का उपयोग करना बेहतर है? प्रत्येक विधि के पेशेवरों और विपक्ष क्या हैं?PHP की _get और _set या अद्वितीय प्रत्येक चर के लिए फ़ंक्शन प्राप्त करें और सेट करें?
उत्तर
__get
और __set
जादू विधियां हैं जिनका उपयोग आमतौर पर डिजाइन आधार के रूप में उपयोग करने के बजाय कठिन समस्याओं को हल करने के लिए किया जाना चाहिए।
उदाहरण के लिए, मैंने खुद को एक परियोजना पर पाया जहां मुझे ऐसी साइट का विश्लेषण करना पड़ा जो ओओपी का उपयोग गहरी विरासत (> 2) के साथ किया गया था और महत्वपूर्ण बेस क्लास में से एक सार्वजनिक संपत्ति थी जिसे name
कहा जाता था। हालांकि, इसमें गेटर्स और सेटर्स भी थे (getName
, setName
) जिसने उस संपत्ति को प्राप्त करने और इसे स्थापित करने के केवल उद्देश्य के लिए उपयोग किया। getName
नामक कई वर्गों और बस name
संपत्ति को सीधे एक्सेस किया गया! महान डिजाइन नहीं है।
जादू विधियों ने मुझे पर संपत्ति का नाम बदलकर समस्या को हल करने की अनुमति दी और इसे निजी बनाने के लिए, गेटर्स और सेटर्स के माध्यम से संपत्ति के सभी अनुरोधों को मजबूर कर दिया।
यह कहा जा रहा है कि अगर आप एक चर जैसे संपत्ति का इलाज कर रहे हैं तो गेटर्स और सेटर्स की कोई आवश्यकता नहीं है। उस मामले में, बस संपत्ति सार्वजनिक करें!
आपके मामले में, चूंकि सत्यापन/स्वच्छता चल रही है, इसलिए आपको गेटर्स और सेटर्स को नियोजित करना चाहिए और उन्हें विधिओं के रूप में सीधे कोड करना चाहिए (जादू की विधियों से अनावश्यक रूप से ओवरहेड करने के बजाए)।
मुझे लगता है कि वहां बहुत बड़ी संख्या में स्थान थे जहां $ इंस्टेंस -> नाम किया जा रहा था, सही? क्योंकि मैं व्यक्तिगत रूप से सोचता हूं कि कक्षाओं को बदलने के लिए बेहतर होगा, जो इसके बजाय getName()/setName() का उपयोग करें और $ name संरक्षित करें। मुझे लगता है कि आप अपने __get और __set विधियों को E_NOTICE या E_DEPRECATED जारी करते समय कॉल कर सकते हैं, इस तरह की सामग्री अभी भी काम करेगी लेकिन आपको सतर्क किया जाएगा कि आप इसे सेटर्स/गेटर्स के माध्यम से नहीं कर रहे थे। हालांकि यह सिर्फ मुझे है। – GordonM
मुझे नियम है कि यदि आपके पास जटिल जटिलता है या सेट सेट है तो एक अलग प्राप्त करें या सेट विधि जोड़ें। यदि आप कुछ आसान कर रहे हैं तो आप या __set
का लाभ उठा सकते हैं जब आप अन्यथा कस्टम कस्टम/सेट विधियों में खुद को दोहराएंगे।
यहां इस समस्या को संभालने का तरीका बताया गया है।
final public function __set($key, $value) {
$method = 'set' . ucfirst($key);
if (method_exists($this, $method)) {
$this->data[$key] = $this->$method($value);
} else {
$this->data[$key] = $value;
}
}
final public function __get($key) {
$method = 'get' . ucfirst($key);
if (method_exists($this, $method)) {
return $this->$method($this->data[$key]);
} else {
return $this->data[$key];
}
}
आप एक संपत्ति के लिए एक कस्टम हैंडलर, यह कहा जाता हो जाता है, तो (यह मानते हुए यह getProperty नामित है)। अन्यथा, डिफ़ॉल्ट प्राप्त/सेट जादू विधि का उपयोग किया जाता है।
- 1. $ _GET चर सेट करने के लिए कैसे करें
- 2. PHP $ _GET सरणी कैसे प्राप्त करें?
- 3. $ _GET और यूआरएल PHP
- 4. php $ _GET और अपरिभाषित अनुक्रमणिका
- 5. 'सत्य' चर प्राप्त करें
- 6. $ _GET और वर्डप्रेस
- 7. जारीकर्ता PHP जारीकर्ता ($ _ प्राप्त करें ['कुछ'])? $ _GET ['कुछ']: ''
- 8. कोहाना, .htaccess, और $ _GET
- 9. प्राप्त करें विधि और PHP
- 10. cmake के लिए फ़ंक्शन में वैश्विक चर सेट कैसे करें?
- 11. web.py: POST पैरामीटर कैसे प्राप्त करें और पैरामीटर प्राप्त करें?
- 12. स्क्रीन रेज़ोल्यूशन प्राप्त करें और सेट करें
- 13. $ _POST के संभावित प्रकार और $ _GET मूल्यों
- 14. PHPUnit, superglobal vars। परीक्षण कैसे सेटअप करें कि $ _SERVER और $ _GET ठीक से सेट हैं?
- 15. PHP पढ़ने 'प्राप्त' चर जो
- 16. PHP के लिए env चर सेट कैसे करें?
- 17. PHP से phpinfo() चर कैसे प्राप्त करें?
- 18. $ फ़ंक्शन() और $$ चर
- 19. $ _GET और $ _POST
- 20. Php में साइट-व्यापी चर सेट अप कैसे करें?
- 21. सी निजी वैरिएबल प्राप्त करें और सेट करें विधि
- 22. जेएनईएन फ्रेमवर्क और/या PHP
- 23. प्रत्येक फ़ंक्शन कॉल पर कुछ निष्पादित करें php
- 24. PHP में कॉपी फ़ंक्शन की प्रगति स्थिति कैसे प्राप्त करें?
- 25. छवि ऊंचाई और चौड़ाई प्राप्त करें PHP
- 26. PHP में अद्वितीय और अस्थायी फ़ाइल नाम?
- 27. स्कैला TreeMap से कुंजी कैसे सेट करें और प्राप्त करें?
- 28. विभिन्न सेट के साथ एक्सेसर और प्रकार प्राप्त करें?
- 29. स्लिम PHP और पैरामीटर प्राप्त करें
- 30. PHP फ़ंक्शंस और @ फ़ंक्शन
यदि आप समझाते हैं कि आपको केवल '__get' और '__set' का उपयोग करने की आवश्यकता क्यों है, तो केवल सार्वजनिक फ़ील्ड के विपरीत। आप हमेशा बाद में '__get' और' __set' में बदल सकते हैं। –
मैं यह जांचने में सक्षम होना चाहता हूं कि डेटा कानूनी है और डेटाबेस में सहेजे जाने से पहले कुछ डेटा को सुधारने की आवश्यकता है, –