2008-12-31 15 views
6

PHP में ओओपी के बारे में अधिक जानने की कोशिश में मेरी खोज में। मैं कन्स्ट्रक्टर फ़ंक्शन में एक अच्छा कुछ बार आया हूं और इसे अब अनदेखा नहीं कर सकता। मेरी समझ में, जब मैं एक वस्तु बनाते हैं तो कन्स्ट्रक्टर को बुलाया जाता है, क्या यह सही है?एक कन्स्ट्रक्टर का उपयोग करने के लाभ?

लेकिन अगर मैं "सामान्य" कार्यों या विधियों के रूप में उपयोग कर सकता हूं तो मुझे इस कन्स्ट्रक्टर को बनाने की आवश्यकता क्यों होगी?

चियर्स, कीथ

+0

इसके अलावा, http://stackoverflow.com/questions/403756/benefits-of-using-a-constructor देखें जो एक ही प्रश्न – Adam

+1

हेक्टेयर से पूछता है, यह उल्लसित है। यही मेरा सवाल है कि मैं पूरी तरह से भूल गया। मैं अपने प्रश्न पूछते समय संबंधित प्रश्नों को देख रहा था और कुछ भी नहीं देखा। क्षमा करें क्योंकि मैं इस प्रश्न को हटा नहीं सकता क्योंकि बहुत सारे उत्तर हैं। –

+0

2 साल शेष, कुछ भी नहीं हुआ)) – zerkms

उत्तर

9

हाँ जब वस्तु बनाई गई है निर्माता कहा जाता है। क्यों यह प्रयोग किया जाना चाहिए एक सवाल यह भी पूछा, एक वास्तविक जीवन उदाहरण के एक डेटाबेस वर्ग है, जहां वस्तु के साथ फोन:

एक निर्माता की उपयोगिता का एक छोटा सा उदाहरण इस

class Bar 
{ 
    // The variable we will be using within our class 
    var $val; 

    // This function is called when someone does $foo = new Bar(); 
    // But this constructor has also an $var within its definition, 
    // So you have to do $foo = new Bar("some data") 
    function __construct($var) 
    { 
     // Assign's the $var from the constructor to the $val variable 
     // we defined above 
     $this->val = $var 
    } 
} 

$foo = new Bar("baz"); 

echo $foo->val // baz 

// You can also do this to see everything defined within the class 
print_r($foo); 

अद्यतन है कनेक्ट करने के लिए कनेक्ट करने वाला उपयोगकर्ता नाम और पासवर्ड और तालिका। फिर आपके पास उस डेटाबेस के भीतर सभी काम करने के लिए कार्य हैं।

+0

उत्तर के लिए धन्यवाद Ólafur। यदि संभव हो, तो क्या आप बेहतर समझने के लिए मेरे लिए प्रत्येक पंक्ति पर टिप्पणी कर सकते हैं? के –

+0

आपकी व्याख्या के लिए धन्यवाद, लेकिन आपके वास्तविक जीवन उदाहरण को समझने में असमर्थ, क्या आप इसके बारे में अधिक जानकारी दे सकते हैं ?? अग्रिम में धन्यवाद। – sradha

28

कन्स्ट्रक्टर आपको यह सुनिश्चित करने की अनुमति देता है कि ऑब्जेक्ट इसे किसी विशेष राज्य में उपयोग करने का प्रयास करने से पहले रखा गया हो। उदाहरण के लिए, यदि आपके ऑब्जेक्ट में कुछ गुण हैं जिनका उपयोग करने के लिए आवश्यक हैं, तो आप उन्हें कन्स्ट्रक्टर में प्रारंभ कर सकते हैं। इसके अलावा, रचनाकार वस्तुओं को शुरू करने के लिए एक कुशल तरीका की अनुमति देते हैं।

6

कन्स्ट्रक्टर का विचार ऑब्जेक्ट के लिए डेटा के शुरुआती समूह को तैयार करना है, इसलिए यह अपेक्षाकृत व्यवहार कर सकता है।

Just call a method कोई सौदा नहीं है, क्योंकि आप इसे करना भूल सकते हैं, और इसे वाक्यविन्यास में "काम से पहले आवश्यक" के रूप में निर्दिष्ट नहीं किया जा सकता है - इसलिए आपको "टूटा" ऑब्जेक्ट मिलेगा।

+1

@ केथ: विकिपीडिया को उद्धृत करने के लिए (और मैं आमतौर पर नहीं करता हूं, लेकिन यह उस मामले में अच्छी तरह से लिखा गया है): "[रचनाकारों] के पास ऑब्जेक्ट के डेटा सदस्यों को प्रारंभ करने और कक्षा के आविष्कार की स्थापना करने का कार्य है, विफल होने पर invariant मान्य नहीं है। एक उचित लिखित कन्स्ट्रक्टर ऑब्जेक्ट को वैध स्थिति में छोड़ देगा।" – netcoder

+1

@netcoder: हाँ, मैंने अपना जवाब लिखने के ठीक बाद देखा - खुद का परीक्षण करने के लिए ;-) चूंकि कोई महत्वपूर्ण अंतर नहीं है और चूंकि SO एक ऐसी साइट है जहां ** लोग उत्तर देते हैं ** (केवल कॉपी-पेस्ट नहीं) - मैं इसे छोड़ दूंगा, भले ही यह बदतर अंग्रेजी के साथ लिखा गया हो ;-) – zerkms

2

रचनाकार विभिन्न प्रकार के लिए अच्छे हैं। वे आपकी कक्षा में चर शुरू करते हैं। मान लें कि आप बैंक अकाउंट क्लास बना रहे हैं। $ बी = नया बैंक खाता (60); एक कंस्ट्रक्टर है जो बैंक खाते को प्रारंभिक मूल्य देता है। वे मूल रूप से कक्षा के भीतर चर सेट करते हैं या वे अन्य वर्गों (विरासत) को भी प्रारंभ कर सकते हैं।

2

निर्माता ऑब्जेक्ट बनने पर प्रारंभिकरण के लिए होता है।

आप नव निर्मित ऑब्जेक्ट पर मनमाने ढंग से विधि नहीं कॉल करना चाहते हैं क्योंकि यह encapsulation के विचार के खिलाफ चला जाता है, और इस वस्तु का उपयोग करने के लिए कोड को इसके आंतरिक कार्यकलापों के अंतर्निहित ज्ञान के लिए आवश्यकता होगी (और अधिक प्रयास की आवश्यकता है)।

+1

ऑब्जेक्ट बनने के बाद, एक सेटटर विधि को कॉल करने के बाद, इंकैप्यूलेशन का उल्लंघन नहीं करता है। कन्स्ट्रक्टर का उपयोग गुण/तर्क को परिभाषित करने के लिए किया जाता है ऑब्जेक्ट द्वारा अपेक्षा के अनुसार व्यवहार करने की आवश्यकता है। – netcoder

+0

@netcoder True, लेकिन अगर कन्स्ट्रक्टर शामिल है, तो कहें, डेटाबेस से कनेक्ट होने पर, आप उम्मीद नहीं करेंगे कि कॉलिंग कोड को ऐसा करने के लिए एक विधि को कॉल करना होगा, जैसा कि आप शायद कॉलिंग कोड को यह भी नहीं जानना चाहिए कि ऑब्जेक्ट को इसकी जानकारी कहां से मिलती है। अच्छा बिंदु, यद्यपि – Adam

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