PHP 5 में function className()
के बजाय मुझे function __construct()
का उपयोग क्यों करना चाहिए?PHP 5 क्लासनाम() के बजाय कन्स्ट्रक्टर के रूप में __contruct() का उपयोग क्यों करता है?
उत्तर
मेरा अनुमान होगा उस समय तक वस्तु उन्मुख क्षमता किया जा रहा था PHP में जोड़ा गया, डिजाइनर पायथन देख रहे थे।
क्योंकि php5 पाइथन की तरह अधिक होना चाहता था।
मैं बच्चा, मैं बच्चा ...
मानक कार्यों के लिए एक मानक पद्धति के बाद, निर्माण की तरह, एक उचित समाधान है। यही कारण है कि सी # कक्षाओं में, जब आप कक्षा का विस्तार करते हैं, तो आप नामित ऑब्जेक्ट के बजाय बेस क्लास कन्स्ट्रक्टर को कॉल करने के लिए base
का उपयोग करते हैं: यह कोड को सरल बनाता है और रखरखाव को आसान बनाता है।
__ जादू विधियों/कार्यों PHP में एक सतत विषय प्रतीत होता है (एक बार के लिए!)। __construct()
ClassName()
पर एक निर्माता के रूप में उपयोग करने का एक लाभ यह है कि यदि आप कक्षा का नाम बदलते हैं, तो आपको कन्स्ट्रक्टर को अपडेट करने की आवश्यकता नहीं है।
क्या आप '_construct()' या 'className()' का उपयोग करते हुए '__autoload()' काम करते हैं? –
मेरी इच्छा है कि सी ++ और जावा ने ctor()/dtor() विधि हस्ताक्षर का उपयोग किया। : -/ –
@ क्लिक करें उपरोक्त हाँ। __autoload() परवाह नहीं करना चाहिए कि कन्स्ट्रक्टर की कौन सी शैली का उपयोग किया गया था। – Asaph
क्योंकि यह __destruct() विधि और अन्य विशेष तरीकों उदाहरण __get, __sleep के लिए दो अंडरस्कोर के साथ शुरुआत के साथ एकीकृत किया गया है, __serialize http://us2.php.net/manual/en/language.oop5.magic.php
ऐसा करने से, आप सुपर (बेस-) कक्षा से कन्स्ट्रक्टर को अपना नाम जानने के बिना बुला सकते हैं। यह वर्ग वृक्ष रखरखाव के लिए बहुत उपयोगी है, क्योंकि आप अपने सभी वर्गों को अपडेट नहीं करना चाहते हैं क्योंकि आप अपने वर्ग के पेड़ों को फिर से व्यवस्थित करना चाहते हैं
और ... अनुमान लगाया जा रहा है .. यदि सभी वर्ग समान रूप से उनके रचनाकारों का नाम देते हैं __construct(), सिद्धांत रूप में एक निर्माता को किसी भी आवश्यक परिभाषा के बिना सुपरक्लास से विरासत में प्राप्त किया जा सकता है। यह कक्षा के पेड़ों में समझ में आता है जहां मध्यवर्ती अमूर्त वर्ग होते हैं, और उद्देश्य सी में संरचनाओं में जहां डिफ़ॉल्ट कन्स्ट्रक्टर व्यवहार पूरी तरह से वर्ग मेटाडेटा से लिया जाता है और इसलिए (बहुमूल्य में!) को कोडिंग की आवश्यकता नहीं होती है।
पुराना सवाल, लेकिन मैं काट दूंगा क्योंकि किसी ने वास्तव में वास्तविक प्रश्न का उत्तर नहीं दिया है।
फ़ंक्शन क्लासनाम() PHP4-style constructor है।
फ़ंक्शन __construct() PHP5-style constructor है।
आपको बाद वाले का उपयोग करना चाहिए क्योंकि पूर्व को हटा दिया गया है और भाषा से हटाया जा सकता है।
इसके अलावा, पूर्व सार्वजनिक/निजी दृश्यता ऑपरेटरों जैसे विभिन्न PHP5 ओओ अवधारणाओं को अनदेखा कर सकता है या नहीं। अगर आप सिंगलटन या फैक्टरी पैटर्न का उपयोग नहीं कर रहे थे तो आप कन्स्ट्रक्टर को निजी बनाना नहीं चाहते हैं।
- 1. कार्यों के बजाय कन्स्ट्रक्टर का उपयोग क्यों किया जाता है?
- 2. डब्ल्यूपीएफ: कॉम्बोबॉक्स प्रदर्शित करता है "(नेमस्पेस)। (क्लासनाम)" डेटा के बजाय
- 3. कोडइग्निटर में कन्स्ट्रक्टर के रूप में क्लासनाम() या __construct() का उपयोग करें?
- 4. ओपनजीएल रेडियंस के बजाय डिग्री का उपयोग क्यों करता है?
- 5. क्यों memo.Lines TStringList के बजाय TStrings का उपयोग करता है?
- 6. आरटीपी टीसीपी के बजाय यूडीपी का उपयोग क्यों करता है?
- 7. रुबी प्रतिक्रिया_to का उपयोग क्यों करता है? responds_to के बजाय?
- 8. कोको विरासत के बजाय प्रतिनिधियों का उपयोग क्यों करता है?
- 9. क्लास क्लासनाम <:: अन्य क्लासनाम रूबी में क्या करता है?
- 10. IPv6 कॉलम को डॉट के बजाय डेलीमीटर के रूप में क्यों उपयोग करता है?
- 11. रूपांतरण निर्माता के बजाय कॉपी कन्स्ट्रक्टर क्यों कहा जाता है?
- 12. कीटोल एमडी 5 के बजाय SHA1 फिंगरप्रिंट उत्पन्न करता है?
- 13. कन्स्ट्रक्टर इंजेक्शन के बजाय प्रॉपर्टी इंजेक्शन का उपयोग
- 14. Forth का उपयोग IF कथन का उपयोग क्यों करता है ... ENDIF के बजाय?
- 15. jquery json को अनुरोध निकाय के बजाय पैरामीटर नाम के रूप में पोस्ट क्यों करता है?
- 16. यूनिक्स समय के लिए डेटटाइम एक पूर्णांक के बजाय डबल का उपयोग क्यों करता है?
- 17. PHP के अंतर्निहित फ़ंक्शंस पैरामीटर के रूप में केवल तारों के बजाय स्थिरांक का उपयोग क्यों करते हैं?
- 18. PHP के पास कोई डिफ़ॉल्ट कन्स्ट्रक्टर क्यों नहीं है?
- 19. reinterpret_cast के बजाय static_cast का उपयोग करना क्यों महत्वपूर्ण है?
- 20. एक कन्स्ट्रक्टर का उपयोग करने के लाभ?
- 21. एसएसई के बजाय एवीएक्स इंट्रिनिक्स का उपयोग गति में सुधार नहीं करता है - क्यों?
- 22. XCS 4.2 क्यों NaututoreleasePool के बजाय main.m में @autoreleasepool का उपयोग करता है?
- 23. अमरूद: क्यों कन्स्ट्रक्टर के बजाय विधियां बनाते हैं?
- 24. अन्य तरीकों के बजाय कर्ल का उपयोग क्यों करें?
- 25. आईज़िप के बजाय ज़िप का उपयोग करना बेहतर क्यों है?
- 26. जावा पैटर्न क्लास कन्स्ट्रक्टर के बजाए फ़ैक्टरी विधि का उपयोग क्यों करता है?
- 27. क्यों ArrayList आकार() के बजाय आकार() प्राप्त नहीं करता है?
- 28. एसकल्प पैरामीटर नाम/मूल्य कन्स्ट्रक्टर 0 शून्य के रूप में क्यों व्यवहार करता है?
- 29. LINQ में FirstOrDefault के बजाय पहले का उपयोग क्यों करें?
- 30. गिट संस्करण संख्या के रूप में SHA-1 का उपयोग क्यों करता है?
@ क्लिक करें उपरोक्त दिलचस्प है कि आपने इसे सही उत्तर के रूप में चुना है। यह तकनीकी रूप से आपके प्रश्न का उत्तर भी नहीं देता है "मुझे PHP 5 में फ़ंक्शन क्लासनाम() के बजाय फ़ंक्शन __construct() का उपयोग क्यों करना चाहिए?" – Asaph
वास्तव में, मैं वास्तव में सिर्फ मुखर था। आसाफ का जवाब निश्चित रूप से बहुत उपयोगी है। –