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

क्लासेज और ऑब्जेक्ट के साथ ऑब्जेक्ट ओरिएंटेड PHP

by
Difficulty:BeginnerLength:LongLanguages:

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

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

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) क्या होती है?

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग, जिसे आमतौर पर OOP के रूप में जाना जाता है, एक दृष्टिकोण है जो आपको जटिल एप्लीकेशंस को इस तरह से डेवलप करने में मदद करता है जो आसानी से लंबे समय तक उसे बनाए रखने योग्य और स्केलेबल है। OOP की दुनिया में, वास्तविक दुनिया की एंटिटी जैसे कि Person, Car, या Animal को ऑब्जेक्ट के रूप में माना जाता है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, आप ऑब्जेक्ट का उपयोग करके अपने एप्लीकेशन के साथ इंटरेक्ट करते हैं। यह प्रोसीजरल प्रोग्रामिंग के साथ विरोधाभास करता है, जहां आप मुख्य रूप से फंक्शन और ग्लोबल वेरिएबल के साथ इंटरेक्ट करते हैं।

OOP में, “class” का एक कंसेप्ट है, जिसका उपयोग डाटा (properties) और फंक्शनैलिटी (methods) के टेंपलेट के लिए एक वास्तविक दुनिया की एंटिटी को मॉडल या मैप करने के लिए किया जाता है। एक “object” एक क्लास का इंस्टेंस होता है, और आप एक ही क्लास के कई इंस्टेंस बना सकते हैं। उदाहरण के लिए, एक सिंगल Person क्लास है, लेकिन कई person ऑब्जेक्ट्स के इंस्टेंस हो सकते हैं - dan, zainab, hector, आदि।

क्लास प्रॉपर्टीज को परिभाषित करती है। उदाहरण के लिए, Person क्लास के लिए, हमारे पास name, age, और phoneNumber हो सकते हैं। फिर प्रत्येक person क्लास ऑब्जेक्ट की उन प्रॉपर्टीज के लिए अपनी वैल्यू होगी।

आप क्लास में उन मेथड्स को भी परिभाषित कर सकते हैं जो आपको ऑब्जेक्ट प्रॉपर्टीज की वैल्यू में मैनिपुलेट करने और ऑब्जेक्ट्स पर ऑपरेशन करने की अनुमति देते हैं। एक उदाहरण के रूप में, आप एक save मेथड को परिभाषित कर सकते हैं जो एक डेटाबेस में ऑब्जेक्ट की जानकारी को सेव करता है।

PHP क्लास क्या होती है?

एक क्लास एक टेंप्लेट है जो एक वास्तविक दुनिया की एंटिटी का प्रतिनिधित्व करती है, और यह एंटिटी की प्रॉपर्टी ओर मेथड को परिभाषित करती है। इस सेक्शन में, हम एक टिपिकल PHP क्लास की बुनियादी शारीरिक रचना पर चर्चा करेंगे।

नए कॉन्सेप्ट्स को समझने का सबसे अच्छा तरीका एक उदाहरण के साथ होता है। तो आइए निम्नलिखित स्निपेट में Employee क्लास पर एक नजर डालें, जो employee एनटीटी को रिप्रेजेंट करता है।

पहली लाइन में class Employee स्टेटमेंट Employee क्लास को परिभाषित करता है। इसके बाद, हम प्रॉपर्टीज, कंस्ट्रक्टर और अन्य मेथड्स को डिक्लेअर करते हैं।

PHP में क्लास प्रॉपर्टीज

आप क्लास की प्रॉपर्टीज को वेरिएबल के रूप में सोच सकते हैं जिनका उपयोग ऑब्जेक्ट के बारे में जानकारी रखने के लिए किया जाता है। ऊपर दिए गए उदाहरण में, हमने तीन प्रॉपर्टीज को परिभाषित किया है-first_name, last_name, और age। ज्यादातर मामलों में, क्लास की प्रॉपर्टीज को ऑब्जेक्ट की शुरुआत करके (instantiate करके) प्राप्त किया जाता है।

ये प्रॉपर्टीज private है, जिसका अर्थ है कि उन तक केवल क्लास के भीतर से ही पहुंचा जा सकता है। यह प्रॉपर्टीज के लिए सबसे सुरक्षित एक्सेस लेवल है। हम इस आर्टिकल में बाद में क्लास की प्रॉपर्टी ओर मेथड के लिए विभिन्न एक्सेस लेवल पर चर्चा करेंगे।

PHP क्लासेज के लिए कंस्ट्रक्टर्स

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

आप __construct मेथड को परिभाषित करके एक कंस्ट्रक्टर को परिभाषित कर सकते हैं।

PHP क्लासेस के लिए मेथड्स

हम क्लास के मेथड्स को उन फंक्शंस के रूप में सोच सकते हैं जो ऑब्जेक्ट्स से जुड़े कुछ खास एक्शंस को करते हैं। ज्यादातर मामलों में, उनका उपयोग ऑब्जेक्ट प्रॉपर्टीज तक पहुंचने और मैनिपुलेट करने और संबंधित ऑपरेशंस को करने के लिए किया जाता है।

ऊपर दिए गए उदाहरण में, हमने getLastName मेथड को परिभाषित किया है, जो ऑब्जेक्ट से जुड़े last name को रिटर्न करता है।

तो यह PHP में क्लास स्ट्रक्चर का एक संक्षिप्त परिचय है। अगले सेक्शन में, हम देखेंगे कि Employee क्लास के ऑब्जेक्ट्स को कैसे इंस्टेंशिएट किया जाए।

PHP में एक ऑब्जेक्ट क्या होता है?

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

Employee क्लास के कॉन्टेक्स्ट में जो हमने अभी पिछले सेक्शन में बनाई है, आइए देखते हैं कि उस क्लास के किसी ऑब्जेक्ट को इंस्टेंशिएट कैसे किया जाए।

जब आप किसी क्लास के ऑब्जेक्ट को उसकी क्लास के नाम के साथ इंस्टेंशिएट करना चाहते हैं तो आप को new कीवर्ड का प्रयोग करने की आवश्यकता होती है, और आपको उस क्लास का एक नया ऑब्जेक्ट इंस्टेंस वापस मिलेगा।

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

इसके बाद, हम $objEmployee ऑब्जेक्ट पर क्लास मेथड को इंफॉर्मेशन प्रिंट करने के लिए कॉल किया है जिसे ऑब्जेक्ट के निर्माण के दौरान initialize गया था। बेशक, आप एक ही क्लास के कई ऑब्जेक्ट्स बना सकते हैं, जैसा कि निम्नलिखित स्निपेट में दिखाया गया है।

निम्न इमेज Employee क्लास और उसके कुछ इंस्टेंसस का एक ग्राफिकल रिप्रेजेंटेशन है।

Object Instantiation

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

Encapsulation

पिछले सेक्शन में, हमने चर्चा की की Employee क्लास के ऑब्जेक्ट्स को कैसे इंस्टेंशिएट किया जाए। यह ध्यान रखना दिलचस्प है कि $objEmployee ऑब्जेक्ट अपने आप में क्लास की प्रॉपर्टी ओर मेथड को एक साथ रखता है। दूसरे शब्दों में, यह उन डिटेल्स को प्रोग्राम के बाकी हिस्सों से छुपाता है। OOP की दुनिया में, इसे डाटा एनकैप्सूलेशन कहा जाता है।

एनकैप्सूलेशन OOP का एक महत्वपूर्ण एस्पेक्ट है जो आपको ऑब्जेक्ट के कुछ प्रॉपर्टीज या मेथड्स तक एक्सेस को प्रतिबंधित (restrict) करने की अनुमति देता है। और यह हमें चर्चा करने के लिए दूसरे टॉपिक पर लाता है: एक्सेस लेवल।

Access Levels

जब आप किसी क्लास में एक प्रॉपर्टी या एक मेथड को परिभाषित करते हैं, तो आप इसे इन तीन एक्सेस लेवल में से एक डिक्लेयर कर सकते हैं - public, private, या protected

Public Access

जब आप किसी प्रॉपर्टी या मेथड को पब्लिक घोषित करते हैं, तो इसे क्लास के बाहर कहीं से भी एक्सेस किया जा सकता है। पब्लिक प्रॉपर्टी की वैल्यू आपके कोड में कहीं से भी मॉडिफाई की जा सकती है।

पब्लिक एक्सेस लेवल को समझने के लिए एक उदाहरण देखते हैं।

जैसा कि आप ऊपर दिए गए उदाहरण में देख सकते हैं, हम name प्रॉपर्टी को पब्लिक के रूप में डिक्लेअर किया है। इसलिए, आप इसे क्लास के बाहर कहीं से भी सेट कर सकते हैं, जैसा कि हमने यहां किया है।

Private Access

जब आप एक प्रॉपर्टी या एक मैसेज को private घोषित करते हैं, तो इसे केवल क्लास के भीतर से ही एक्सेस किया जा सकता है। इसका मतलब यह है कि आपको उस प्रॉपर्टी की वैल्यू को प्राप्त करने और सेट करने के लिए getter और setter मेथड्स को परिभाषित करने की आवश्यकता होगी।

फिर से, प्राइवेट एक्सेस लेवल को समझने के लिए पिछले उदाहरण को रिवाइज करते हैं।

यदि आप क्लास के बाहर से किसी प्राइवेट प्रॉपर्टी तक पहुंचने का प्रयास करते हैं, तो यह फेटल एरर थ्रो करेगा Cannot access private property Person::$name। इस प्रकार, आपको setter मेथड का उपयोग करके प्राइवेट प्रॉपर्टी की वैल्यू को सेट करने की आवश्यकता है, जैसा कि हमने setName मेथड का उपयोग करके किया था।

ऐसे कईं अच्छे कारण है जिनके कारण आप किसी प्रॉपर्टी को प्राइवेट बनाना चाहेंगे। उदाहरण के लिए, शायद कुछ एक्शन लिया जाए ( यदि कोई डेटाबेस बदलता है, या यह कहे कि किसी टेंप्लेट को फिर से रेंडर करता है) तो वह प्रॉपर्टी बदल जाती है। उस स्थिति में, आप एक setter मेथड को परिभाषित कर सकते हैं और प्रॉपर्टी बदलने पर किसी विशेष लॉजिक को हैंडल कर सकते हैं।

Protected Access

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

Inheritance

इन्हेरिटेंस ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग paradigm का एक महत्वपूर्ण एस्पेक्ट है जो आपको अन्य क्लासेज की प्रॉपर्टी ओर मेथड को एक्सटेंड करने की अनुमति देता है। जिस क्लास को इन्हेरीट किया जा रहा हो, उसे parent class कहा जाता है, और जो क्लास किसी दूसरी क्लास को इन्हेरीट करती है, उसे child class कहा जाता है। जब आप चाइल्ड क्लास के किसी ऑब्जेक्ट को इंस्टेंशिएट करते हैं, तो यह पैरंट क्लास की प्रॉपर्टी ओर मेथड को भी इन्हेरीट करता है।

आइए इनहेरिटेंस के कंसेप्ट को समझने के लिए निम्नलिखित स्क्रीनशॉट पर एक नजर डालें।

Inheritance

ऊपर दिए गए उदाहरण में, Person क्लास पैरेंट क्लास है, और Employee क्लास को एक्सटेंड या इन्हेरीट करती है और इसलिए उसे चाइल्ड क्लास कहा जाता है।

आइए यह समझने के लिए कि यह कैसे काम करता है, वास्तविक दुनिया के उदाहरण के माध्यम से चलने की कोशिश करते हैं।

यहां ध्यान देने वाली महत्वपूर्ण बात यह है कि Employee क्लास में Person क्लास को इन्हेरीट करने के लिए extends कीवर्ड का उपयोग किया है। अब, Employee क्लास Person क्लास की सभी प्रॉपर्टीज और मेथड्स को एक्सेस कर सकती है जिन्हें पब्लिक या प्रोटेक्टेड घोषित किया गया है। (यह उन मेंबर तक नहीं पहुंच सकते जिन्हें प्राइवेट घोषित किया गया है।)

ऊपर दिए गए उदाहरण में, $employee ऑब्जेक्ट getName और setName मेथड्स तक पहुंच सकता है जो कि Person क्लास में परिभाषित किए गए हैं क्योंकि वे पब्लिक घोषित किए गए हैं।

इसके बाद, हमने callToProtectedNameAndAge मेथड को Employee क्लास में परिभाषित getNameAndAge मेथड का उपयोग करके एक सेट किया है, क्योंकि यह प्रोटेक्टेड घोषित है। अंत में, $employee ऑब्जेक्ट Person क्लास के callToPrivateNameAndAge मेथड को एक्सेस नहीं कर सकते क्योंकि यह प्राइवेट घोषित है।

दूसरी ओर, आप Person क्लास की age प्रॉपर्टी को सेट करने के लिए $employee ऑब्जेक्ट का उपयोग कर सकते हैं, जैसा setAge मेथड में किया था जो Employee क्लास में परिभाषित है, क्योंकि age प्रॉपर्टी को प्रोटेक्टेड घोषित किया गया है।

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

Polymorphism

पॉलीमोरफ़िज्म ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की दुनिया में एक और महत्वपूर्ण कंसेप्ट है जो ऑब्जेक्ट्स को उनके डाटा टाइप्स के आधार पर अलग-अलग प्रोसेस करने की क्षमता को रेफर करता है।

उदाहरण के लिए, इनहेरिटेंस के संदर्भ में, यदि चाइल्ड क्लास पैरंट क्लास मेथड के बिहेवियर को बदलना चाहती हैं, तो वह इस मेथड को ओवरराइड कर सकती है। इसे मेथड ओवरराइडिंग कहा जाता है। आइए जल्दी से एक वास्तविक दुनिया के उदाहरण के माध्यम से मेथड ओवरराइडिंग के कंसेप्ट को समझने के लिए चलते हैं।

जैसा कि आप देख सकते हैं, हम BoldMessage क्लास में इसे ओवरराइड करके formatMessage मेथड के बिहेवियर को बदल दिया है। महत्वपूर्ण बात यह है कि किसी मैसेज को ऑब्जेक्ट टाइप के आधार पर अलग-अलग फॉर्मेट किया जाता है, चाहे वह पैरंट क्लास का इंस्टेंस हो या चाइल्ड क्लास का।

(कुछ ऑब्जेक्ट-ओरिएंटेड लैंग्वेज में भी एक तरह का मेथड ओवरलोडिंग होता है जो आपको एक ही नाम के साथ कई क्लास मैथर्ड को परिभाषित करने देता है लेकिन एक अलग संख्या में अरगुमेंट्स के साथ। यह सीधे PHP में सपोर्टेड नहीं है, लेकिन इसी के सामान फंक्शनैलिटी प्राप्त करने के लिए हम कुछ काम कर सकते हैं।)

निष्कर्ष

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग एक विशाल विषय है, और हमने केवल इसके कंपलेक्सिटी के सरफेस को स्क्रैच किया है। मुझे उम्मीद है कि इस ट्यूटोरियल ने आप को OOP की बेसिक बातों के साथ शुरू करने में मदद की है और यह आपको OOP टॉपिक्स पर आगे बढ़ने और सीखने के लिए प्रेरित करता है।

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

नीचे दी गई फीड का उपयोग करके अपने प्रश्नों को पोस्ट करने के लिए स्वतंत्र महसूस करें!

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.