2009-10-06 17 views

उत्तर

2

मेरा अनुमान होगा उस समय तक वस्तु उन्मुख क्षमता किया जा रहा था PHP में जोड़ा गया, डिजाइनर पायथन देख रहे थे।

+5

@ क्लिक करें उपरोक्त दिलचस्प है कि आपने इसे सही उत्तर के रूप में चुना है। यह तकनीकी रूप से आपके प्रश्न का उत्तर भी नहीं देता है "मुझे PHP 5 में फ़ंक्शन क्लासनाम() के बजाय फ़ंक्शन __construct() का उपयोग क्यों करना चाहिए?" – Asaph

+1

वास्तव में, मैं वास्तव में सिर्फ मुखर था। आसाफ का जवाब निश्चित रूप से बहुत उपयोगी है। –

4

क्योंकि php5 पाइथन की तरह अधिक होना चाहता था।

मैं बच्चा, मैं बच्चा ...

मानक कार्यों के लिए एक मानक पद्धति के बाद, निर्माण की तरह, एक उचित समाधान है। यही कारण है कि सी # कक्षाओं में, जब आप कक्षा का विस्तार करते हैं, तो आप नामित ऑब्जेक्ट के बजाय बेस क्लास कन्स्ट्रक्टर को कॉल करने के लिए base का उपयोग करते हैं: यह कोड को सरल बनाता है और रखरखाव को आसान बनाता है।

27

__ जादू विधियों/कार्यों PHP में एक सतत विषय प्रतीत होता है (एक बार के लिए!)। __construct()ClassName() पर एक निर्माता के रूप में उपयोग करने का एक लाभ यह है कि यदि आप कक्षा का नाम बदलते हैं, तो आपको कन्स्ट्रक्टर को अपडेट करने की आवश्यकता नहीं है।

+2

क्या आप '_construct()' या 'className()' का उपयोग करते हुए '__autoload()' काम करते हैं? –

+1

मेरी इच्छा है कि सी ++ और जावा ने ctor()/dtor() विधि हस्ताक्षर का उपयोग किया। : -/ –

+0

@ क्लिक करें उपरोक्त हाँ। __autoload() परवाह नहीं करना चाहिए कि कन्स्ट्रक्टर की कौन सी शैली का उपयोग किया गया था। – Asaph

4

क्योंकि यह __destruct() विधि और अन्य विशेष तरीकों उदाहरण __get, __sleep के लिए दो अंडरस्कोर के साथ शुरुआत के साथ एकीकृत किया गया है, __serialize http://us2.php.net/manual/en/language.oop5.magic.php

1

ऐसा करने से, आप सुपर (बेस-) कक्षा से कन्स्ट्रक्टर को अपना नाम जानने के बिना बुला सकते हैं। यह वर्ग वृक्ष रखरखाव के लिए बहुत उपयोगी है, क्योंकि आप अपने सभी वर्गों को अपडेट नहीं करना चाहते हैं क्योंकि आप अपने वर्ग के पेड़ों को फिर से व्यवस्थित करना चाहते हैं

और ... अनुमान लगाया जा रहा है .. यदि सभी वर्ग समान रूप से उनके रचनाकारों का नाम देते हैं __construct(), सिद्धांत रूप में एक निर्माता को किसी भी आवश्यक परिभाषा के बिना सुपरक्लास से विरासत में प्राप्त किया जा सकता है। यह कक्षा के पेड़ों में समझ में आता है जहां मध्यवर्ती अमूर्त वर्ग होते हैं, और उद्देश्य सी में संरचनाओं में जहां डिफ़ॉल्ट कन्स्ट्रक्टर व्यवहार पूरी तरह से वर्ग मेटाडेटा से लिया जाता है और इसलिए (बहुमूल्य में!) को कोडिंग की आवश्यकता नहीं होती है।

0

पुराना सवाल, लेकिन मैं काट दूंगा क्योंकि किसी ने वास्तव में वास्तविक प्रश्न का उत्तर नहीं दिया है।

फ़ंक्शन क्लासनाम() PHP4-style constructor है।

फ़ंक्शन __construct() PHP5-style constructor है।

आपको बाद वाले का उपयोग करना चाहिए क्योंकि पूर्व को हटा दिया गया है और भाषा से हटाया जा सकता है।

इसके अलावा, पूर्व सार्वजनिक/निजी दृश्यता ऑपरेटरों जैसे विभिन्न PHP5 ओओ अवधारणाओं को अनदेखा कर सकता है या नहीं। अगर आप सिंगलटन या फैक्टरी पैटर्न का उपयोग नहीं कर रहे थे तो आप कन्स्ट्रक्टर को निजी बनाना नहीं चाहते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे