Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

वास्तविक दुनिया का OOP PHP और MySQL के साथ

by
Difficulty:IntermediateLength:LongLanguages:

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

बहुत सारे उदाहरण रोबोट से लेकर साइकिल तक आपको एक “आसान” व्याख्या देते हैं कि OOP क्या है। मैंने वास्तविक दुनिया के उदाहरण के साथ आपको यह बताना चुना की OOP कैसे काम करता है। MySQL का CRUD क्लास बनाकर आप अपने किसी भी प्रोजेक्ट में एंट्रीज को आसानी से create, read, update  और delete कर सकते हैं, इस बात से फर्क नहीं पड़ता कि डेटाबेस किस प्रकार से डिजाइन किया गया है।


एक बारी है पता लगा लेने के बाद कि हमें क्या चाहिए आपके क्लास का स्केलेटन को सेट अप करना बहुत ही आसान है। सबसे पहले हमें पक्का करना होगा कि हम अपने बेसिक MySQL के फंक्शन को कर सके। ऐसा करने के लिए, हमें नीचे दिए गए फंक्शंस की आवश्यकता होगी:

  • Select
  • Insert
  • Delete
  • Update
  • Connect
  • Disconnect

यह काफी बेसिक नजर आते हैं, पर मुझे विश्वास है कि जैसे जैसे हम आगे बढ़ेंगे, हमें पता चलेगा कि इनमें से बहुत सारे एक ही प्रकार के एस्पेक्ट का प्रयोग करते हैं, इसलिए शायद हमें और अधिक क्लासेज बनाने की आवश्यकता होगी। यहां दिया गया है कि आपकी क्लास की डेफिनेशन किस प्रकार नजर आनी चाहिए। ध्यान दें कि मैंने यह पक्का किया है कि सभी मेथड को public कीवर्ड के साथ बनाया जाए।

connect() फंक्शन

यह फंक्शन काफी आसान होगा, पर इसे बनाने के लिए पहले हमें कुछ वैरियेबल्स की जरूरत होगी। क्योंकि हम यह पक्का करना चाहते हैं कि यह हमारे क्लास के बाहर से इस्तेमाल ना हो पाए, हम इन्हें प्राइवेट बनाकर सेट करेंगे। इन वेरिएबल का प्रयोग कनेक्शन के लिए होस्ट, यूजरनेम, पासवर्ड और डेटाबेस को स्टोर करने के लिए किया जाएगा। क्योंकि यह सब हमेशा एक कांस्टेंट ही रहेंगे, हमें किसी modifier या accessor मेथड को इनके लिए बनाने की आवश्यकता नहीं होगी। इसके बाद, हमें बस एक साधारण mysql ट्रीटमेंट की आवश्यकता होगी जिससे यह डेटाबेस से कनेक्ट हो सके। बेशक, हमें एक प्रोग्रामर की तरह हमेशा यह मानना पड़ता है की यूजर (चाहे वह हम ही क्यों ना हो) कुछ स्टूपिड चीजें करेगा, चलिए एतिहात के लिए एक अतिरिक्त लेयर जोड़ दें। हम सबसे पहले यह चेक करेंगे कि क्या यूजर डाटाबेस से सच में कनेक्ट है, और अगर वह है तो, उन्हें फिर से कनेक्ट करने की जरूरत नहीं है। अगर वह नहीं है तो हम उनके क्रेडेंशियल को कनेक्ट करने के लिए प्रयोग करेंगे।

जैसा कि आप देख सकते हैं, इसमें कुछ साधारण mysql के फंक्शन का प्रयोग किया गया है और थोड़ा सा एरर चेकिंग यह पक्का करने के लिए की चीजें वैसी ही जा रही है जैसे हमने प्लान की थी। अगर यह डेटाबेस से सफलतापूर्वक कनेक्ट हो जाता है यह true रिटर्न करेगा, और यदि नहीं, यह false रिटर्न करेगा। एक जोड़े गए बोनस की तरह यह अगर कनेक्शन सफलतापूर्वक पूरा हो गया है तो कनेक्शन वेरिएबल को true पर सेट करेगा।

public function disconnect()

यह इस फंक्शन से यह चेक करेगा की क्या हमारा कनेक्शन वेरिएबल true पर सेट है। अगर यह है, तो इसका मतलब है कि यह डेटाबेस से कनेक्ट है, और हमारी स्क्रिप्ट डिस्कनेक्ट होगी और true रिटर्न करेगी। यदि नहीं, तो यहां कुछ भी सही में करने की आवश्यकता नहीं है।

public function select()

यह वह पहला फंक्शन है जहां चीजें थोड़ी मुश्किल होना शुरू होती है। अब हम यूजर के अरगुमेंट का सामना करेंगे और रिजल्ट को सही तरीके से रिटर्न करेंगे। क्योंकि हम जरूरी नहीं कि रिजल्ट का उपयोग तुरंत करना चाहे हम साथ ही एक नया वेरिएबल इंट्रोड्यूस करेंगे इसका नाम होगा result, जो रिजल्ट को सही तरीके से स्टोर करेगा। इसके अलावा हम एक नया फंक्शन बनाने जा रहे हैं जो यह जांच करेगा कि कोई खास टेबल डाटा बेस में मौजूद है कि नहीं। क्योंकि हमारे सभी CRUD ऑपरेशन को इसकी आवश्यकता है, तो यह ज्यादा अच्छा है कि इसे अलग से बनाएं ना की किसी फंक्शन के अंदर। इस तरीके से, हम अपने कोड हमें जगह बचा सकते हैं। इसी तरह और भी बहुत कुछ, हम चीजों को बाद में और अधिक अच्छे तरीके से ऑप्टिमाइज करने लायक होंगे। एक सही की select स्टेटमेंट में जाने से पहले, यह एक tableExists फंक्शन है और प्राइवेट रिजल्ट वेरिएबल भी।

यह फंक्शन बहुत डेटाबेस में यह चेक करता है कि क्या जिस टेबल की हमें जरूरत है वह मौजूद है। यदि है, तो यह true रिटर्न करता है और यदि नहीं है यह false रिटर्न करता है।

हांलाकि पहली नजर में यह थोड़ा डरावना लगता है, यह फंक्शन बहुत सारी चीजें करता है। सबसे पहले यह 4 आर्ग्यूमेंट्स को एक्सेप्ट करता है, जिनमें से 1 रिक्वायर्ड है। टेबल का नाम वो इकलौती चीज है जिसे आप को इस फंक्शन में पास करने की आवश्यकता है यदि आप रिजल्ट प्राप्त करना चाहते हैं। फिर भी, यदि आपकी से थोड़ा और अधिक कस्टमाइज करना चाहते हैं, आप यह add करके कर सकते हैं की डेटाबेस में से कौन सी row को निकाला जाना है, और आप यह where और order क्लोज को लगाकर कर सकते हैं। बेशक, जब तक आप पहली वैल्यू को पास करते हैं, रिजल्ट पहले से ही सेट डिफॉल्ट के साथ होगा, तो आपको इन सभी की सेटिंग करने की चिंता करने की जरूरत नहीं है। अरगुमेंट के बाद वाले थोड़े से कोड को सिर्फ हमारे सभी अरगुमेंट को एक सिलेक्ट स्टेटमेंट में कंपाइल करने के लिए कार्य करता है। एक बार जब यह हो जाए, यह जांच हमारे पहले के tableExists फंक्शन का प्रयोग करते हुए, पूरी हो जाती है की टेबल मौजूद है कि नहीं। यदि यह मौजूद है, तो फंक्शंस आगे चलता रहता है और query चलाई जाती है। यदि नहीं, यह फेल हो जाएगा।

अगला सेक्शन कोड का एक वास्तविक जादू है। यह कुछ ऐसा करता है कि कॉलम और डाटा को इकट्ठा करता है जो कि डेटाबेस द्वारा रिक्वेस्ट किए गए हैं। उसके बाद यह इसे रिजल्ट वेरिएबल में असाइन कर देता है। फिर भी, एंड यूजर के लिए इसे आसान बनाने के लिए, ऑटो-इनक्रिमिनेटिंग न्यूमैरिक keys के बजाय, कॉलम के नाम का प्रयोग किया जाता है। यदि आप एक से अधिक रिजल्ट प्राप्त करते हैं तो ही परिस्थिति में वह सभी row जो रिटर्न की गई है वह दो डाइमेंशनल वाले array में स्टोर की जाती है, जिसमें पहली key एक न्यूमेरिकल और ऑटो-इनक्रिमिनेटिंग होती है,और दूसरी key कोलम का नाम होती है। यदि केवल एक रिजल्ट रिटर्न किया जाता है, तब एक डाइमेंशनल का array जिसमें कॉलम्स के रूप में keys होती है बनाया जाता है। यदि कोई रिजल्ट रीटर्न नहीं किया जाता तब रिजल्ट वेरिएबल null में सेट कर दिया जाता है। जैसा कि मैंने पहले कहा, यह थोड़ा उलझन भरा है, पर एक बार आप इन चीजों को इनके अलग-अलग सेक्शन में बांट देंगे, तो आप देखेंगे कि यह काफी सिंपल और सीधी है।

public function insert()

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

जैसा कि आप देख सकते हैं, यह फंक्शन हमारे मुश्किल सिलेक्ट स्टेटमेंट के मुकाबले बहुत ही सिंपल है। हमारा डिलीट फंक्शन इससे भी अधिक सिंपल होगा।

public function delete()

यह फंक्शन टेबल या डेटाबेस की row को सीधे-सीधे डिलीट कर देता है। जैसे कि हमें एक टेबल का नाम और एक ऑप्शनल where क्लोज को पास करना होगा। where क्लास हमे बताएगी की यदि हमे एक row या पुरे टेबल को डिलीट करने की आवश्यकता है। अगर where क्लॉज़ को पास किया जाता है, इसका अर्थ होगा की जो एंट्रीज मैच करती है उन्हें डिलीट किये जाने की आवश्यकता होगी। इन सभी चीजों का पता लगाने के बाद, यह से हमारी डिलीट स्टेटमेंट को कंपाइल और क्वेरी को रन करने की बात है।

और अंततः हम अपने अंतिम मेजर फंक्शन को प्राप्त करते हैं। यह फंक्शन डेटाबेस की row को कुछ नई इनफार्मेशन के साथ अपडेट करने के लिए सर्व करता है। फिर भी, इसके थोड़े से अधिक कॉन्प्लेक्स व्यवहार के कारण, यह थोड़ा बड़ा और थोड़ी अधिक उलझन (confusion) के साथ खत्म होता है। कभी मत डरो यह लगभग उसी पैटर्न का प्रयोग करता है जो हमारी पिछले फंक्शन में था। सबसे पहले यह अपडेट स्टेटमेंट को बनाने के लिए हमारे अरगुमेंट का प्रयोग करेगा। इसके बाद यह डेटाबेस को चेक करने के लिए आगे बढ़ेगा यह पक्का करने के लिए की tableExists है। यदि यह मौजूद है, यह उस row को अपडेट कर देगा। मुश्किल हिस्सा, बेशक, उस समय आता है जब हम अपडेट स्टेटमेंट को बनाते हैं और चलाते हैं। क्योंकि अपडेट स्टेटमेंट के अंदर एक फूल है एक से अधिक एंट्री को अपडेट करना (IE -  एक ही row अलग अलग कॉलम को कॉमा की मदद से), हमें इस बात का ध्यान रखना चाहिए और इसे सुलझाने का रास्ता निकालना चाहिए। मेरे पास एक ऑप्शन है जहां में एक सिंगल array के रूप में where क्लोज को पास कर सकता हूं। Array का पहला एलिमेंट उस कॉलम का नाम होगा जिसे अपडेट किया जाना है,और उसके बाद वाला उस कॉलम की वैल्यू होगी। इस तरीके से और सम संख्या ( जिसमें 0 भी शामिल है) कॉलम का नाम होंगी, और हर विषम संख्या एक नई वैल्यू होगी। इसको करने वाला कोड बहुत ही आसान है, और नीचे दिया गया है फंक्शन के बाहर:

अगला सेक्शन अपडेट स्टेटमेंट का एक हिस्सा बनाएगा जो वास्तव में वेरिएबल की सेटिंग करने का कार्य करेगा। क्योंकि आप जितनी चाहे उतनी वैल्यू को बदल सकते हैं, मैंने array के साथ जाना चुना है जहां key एक कॉलम है और वैल्यू कॉलम की नई वैल्यू है। इस तरीके से हम यह भी चेक कर सकते हैं की कितनी अलग अलग वैल्यू को अपडेट करने के लिए पास किया गया है और उसी के अनुसार कॉमा को जोड़ें।

अब हमने लॉजिक के उन दो हिस्सों को निकाल लिया है, अपडेट स्टेटमेंट में बाकी सब आसान है। यहां नीचे इसे दर्शाया गया है:

अब हमारे पास यह है तो अब हम अपने अंतिम फंक्शन को खत्म करते हैं, हमारा MySQL के लिए सिंपल CRUD इंटरफ़ेस पूरा हो गया है। अब नई एंट्री बना सकते हैं, डेटाबेस से किसी खास एंट्री को पढ़ सकते हैं, एंट्री को अपडेट कर सकते हैं और चीजों को डिलीट कर सकते हैं। साथ ही, इस क्लास को बनाकर और बार बार प्रयोग करके आप पाएंगे कि आप अपना बहुत सारा समय और कोडिंग को बचा रहे हैं। आह, यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की खूबसूरती है।

प्रयोग

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

पहली लाइन पर कमेंट किया गया है क्योंकि हर किसी को इसकी जरूरत नहीं होती। अगर आपको इसे चलाने की एक बार से ज्यादा जरूरत है, आपको दूसरी बार इस कमेंट को हटाना होगा यह पक्का करने के लिए कि यह एक टेबल बना रहा है।

अब जबकि हमारी टेबल बन गई है और पॉप्युलेट भी हो गई है, यह समय है कुछ आसान सी query को इस पर चलाने का।

अगर सब कुछ सही से किया है, आपको नीचे की तरह कुछ नजर आना चाहिए:

इसी तरह से हम एक कदम आगे बढ़ सकते हैं और एक अपडेट क्वेरी को चला सकते हैं, और फिर रिजल्ट को आउटपुट कर सकते हैं:

हमें यह नजर आना चाहिए

अब एक आसान सी इंसर्ट स्टेटमेंट के लिए:

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.