दिलचस्प पोस्ट

PHP में एक वर्ग क्या है?

मुझे एक पुस्तक से PHP वर्गों को समझने में गंभीर समस्याएं आ रही हैं I वे बहुत मुश्किल लगते हैं। उनका उद्देश्य क्या है और वे कैसे काम करते हैं?

Solutions Collecting From Web of "PHP में एक वर्ग क्या है?"

संक्षेप में , एक कक्षा एक वस्तु के लिए एक खाका है और एक वस्तु आपके आवेदन में कुछ की अवधारणा से संबंधित राज्य और उत्तरदायित्व को घेरेगी और आमतौर पर इन प्रोग्रामों के साथ बातचीत करने के लिए एक प्रोग्रामिंग इंटरफ़ेस प्रदान करता है। यह कोड पुन: उपयोग को बढ़ावा देता है और रखरखाव में सुधार करता है।


एक लॉक की कल्पना करो:

namespace MyExample; class Lock { private $isLocked = false; public function unlock() { $this->isLocked = false; echo 'You unlocked the Lock'; } public function lock() { $this->isLocked = true; echo 'You locked the Lock'; } public function isLocked() { return $this->isLocked; } } 

namespace अनदेखा करें, private और public घोषणा अभी

लॉक कक्षा आपके आवेदन में सभी ताले के लिए एक खाका है। लॉक या तो लॉक या अनलॉक किया जा सकता है , जिसे $isLocked । चूंकि यह केवल इन दो राज्यों में हो सकता है, मैं यह बताता हूं कि किस राज्य पर लागू होता है, मैं एक बूलियन ( true या false ) का उपयोग करता हूं मैं ताला के माध्यम से lock और unlock के तरीकों से बातचीत कर सकता हूं, जो राज्य को तदनुसार बदल देगा। द isLocked पद्धति मुझे ताला की वर्तमान स्थिति देगा। अब, जब आप इस ब्लूप्रिंट से ऑब्जेक्ट (अक्सर प्रायः एक उदाहरण के रूप में संदर्भित) बनाते हैं, तो यह अनूठी अवस्था में शामिल होगा, जैसे

 $aLock = new Lock; // Create object from the class blueprint $aLock->unlock(); // You unlocked the Lock $aLock->lock(); // You locked the Lock 

आइए एक और ताला बना लीजिए, यह अपनी खुद की स्थिति का भी रूप है

 $anotherLock = new Lock; $anotherLock->unlock(); // You unlocked the Lock 

लेकिन क्योंकि प्रत्येक ऑब्जेक्ट / इंस्टॉलेशन इसे अपने राज्य के रूप में सामने आता है, पहले लॉक लॉक रहता है

 var_dump( $aLock->isLocked() ); // gives Boolean true var_dump( $anotherLock->isLocked() ); // gives Boolean false 

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

 class Door { private $lock; private $connectsTo; public function __construct(Lock $lock) { $this->lock = $lock; $this->connectsTo = 'bedroom'; } public function open() { if($this->lock->isLocked()) { echo 'Cannot open Door. It is locked.'; } else { echo 'You opened the Door connecting to: ', $this->connectsTo; } } } 

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

 class Chest { private $lock; private $loot; public function __construct(Lock $lock) { $this->lock = $lock; $this->loot = 'Tons of Pieces of Eight'; } public function getLoot() { if($this->lock->isLocked()) { echo 'Cannot get Loot. The chest is locked.'; } else { echo 'You looted the chest and got:', $this->loot; } } } 

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

 $doorLock = new Lock; $myDoor = new Door($doorLock); $chestLock = new Lock; $myChest new Chest($chestLock); 

छाती और दरवाजे के पास अब अपनी अनूठी ताले हैं यदि ताला एक जादुई ताला होता है जो एक ही समय में कई स्थानों पर मौजूद हो सकता है, जैसे क्वांटम भौतिकी में, आप दोनों को सीने और दरवाज़े के समान ताला लगा सकते हैं, उदा।

 $quantumLock = new Lock; $myDoor = new Door($quantumLock); $myChest new Chest($quantumLock); 

और जब आप unlock() $quantumLock , दोनों दरवाजा और छाती अनलॉक हो जाएगा

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

ध्यान दें कि उपरोक्त उदाहरण lock() और unlock() विधियों का उपयोग करने के लिए एक छाती या एक दरवाज़े के लॉक को कैसे प्राप्त नहीं करते हैं यह नहीं दिखाते हैं मैं इसे अपने काम के लिए एक व्यायाम के रूप में छोड़ देता हूं (या किसी और को जोड़ने के लिए)

यह भी जांचें कि $ $ से स्वयं का उपयोग कब किया जाए? क्लासेस और ऑब्जेक्ट्स की अधिक गहराई से व्याख्या के लिए और उनके साथ कैसे काम करें

कुछ अतिरिक्त संसाधनों की जांच के लिए

मुझे पता है कि आपने एक संसाधन के लिए पूछा, स्पष्टीकरण नहीं दिया, लेकिन यहां कुछ है जो मुझे कक्षाओं के बुनियादी कार्यान्वयन को समझते हैं:

कक्षा को इमारत के एक टेम्पलेट के रूप में कल्पना करो। एक बुनियादी स्केच कैसे एक इमारत की तरह दिखना चाहिए। जब आप वास्तव में इसे बनाने जा रहे हैं, तो आप कुछ चीजें बदल सकते हैं, ऐसा लगता है जैसे आपका क्लाइंट चाहता है ( वर्ग के मामले में गुण) अब आपको यह डिज़ाइन करना होगा कि भवन के अंदर की चीजें कैसे व्यवहार करने जा रही हैं ( विधियां )। मैं इसे एक सरल उदाहरण पर दिखाने के लिए जा रहा हूँ

बिल्डिंग क्लास:

 /** * Constructs a building. */ class Building { private $name; private $height; public function __construct( $name, $height ) { $this->name = $name; $this->height = $height; } /** * Returns name of building. * * @return string */ public function getName( ) { return $this->name; } public function elevatorUp( ) { // Implementation } public function elevatorDown( ) { // Implementation } public function lockDoor( ) { // Implementation } } 

कक्षा कॉल करना:

 // Empire State Building $empireStateBuilding = new Building( "Empire State Building", 381 ); echo $empireStateBuilding->getName( ); $empireStateBuilding->lockDoor( ); // Burj Khalifa $burjKhalifa = new Building( "Burj Khalifa", 828 ); echo $burjKhalifa->getName( ); $burjKhalifa->lockDoor( ); 

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

अगर मैं कृपया (व्यक्तिगत अनुभव के आधार पर) कृपया दूसरे कोण से एक दृश्य प्रदान कर सकता हूं इससे पहले कि आप वास्तव में यह समझ सकें कि आईएमएचओ क्या है, इसके बारे में आपको "ओओपी की जरूरत" महसूस करने की जरूरत है, इसके बाद संसाधनों को सीखना चाहिए।

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

केवल मेरे दो सेंट्स।