⊗ppOpIhPPP 33 of 107 menu

PHP में OOP विरासत में निजी गुणों की समस्या

यह तथ्य कि निजी गुण विरासत में नहीं मिलते, एक अप्रत्याशित समस्या पैदा कर सकता है। आइए एक उदाहरण से देखते हैं। मान लीजिए कि हमारे पास एक निजी गुण वाला निम्नलिखित मूल वर्ग है:

<?php class User { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; } } ?>

मान लीजिए कि व्युत्पन्न वर्ग में हमने एक ऐसी विधि बनाने का निर्णय लिया जो आयु को एक से बढ़ाएगी। हालाँकि, मूल वर्ग के निजी गुण को बदलने का प्रयास त्रुटि का कारण बनेगा:

<?php class Student extends User { public function incAge() { $this->age++; // त्रुटि } } ?>

त्रुटि गायब हो जाएगी यदि व्युत्पन्न वर्ग में निजी गुण $age घोषित किया जाए:

<?php class Student extends User { private $age; public function incAge() { $this->age++; } } ?>

यहीं पर एक और समस्या छिपी है! वास्तव में, हमने दो निजी गुण बना दिए हैं: एक मूल वर्ग में और एक व्युत्पन्न वर्ग में। और वे पूरी तरह से स्वतंत्र रूप से काम करते हैं। इसका मतलब है कि मूल वर्ग की विधियाँ अपना गुण बदलेंगी, और व्युत्पन्न वर्ग की विधियाँ - अपना गुण।

इस समस्या का वास्तव में एक समाधान है। बस मूल वर्ग के निजी गुणों को उस मूल वर्ग की विधियों के माध्यम से प्रबंधित करने की आवश्यकता है। आइए इसके अनुसार अपना कोड फिर से लिखें:

<?php class Student extends User { public function incAge() { $age = $this->getAge(); $age++; $this->setAge($age); } } ?>

इसे सरल बनाया जा सकता है:

<?php class Student extends User { public function incAge() { $this->setAge($this->getAge() + 1); } } ?>

निम्नलिखित कोड में, व्युत्पन्न वर्ग में मूल वर्ग की विधि को ओवरराइड किया गया है। इस कोड में समस्याओं को सही करें:

<?php class User { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } class Employee extends User { public function setName($name) { if (strlen($name) > 0) { $this->name = $name; // त्रुटि } } } ?>
हिन्दी
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
हम साइट के कार्य, विश्लेषण और व्यक्तिगतकरण के लिए कुकीज़ का उपयोग करते हैं। डेटा प्रसंस्करण गोपनीयता नीति के अनुसार किया जाता है।
सभी स्वीकार करें कॉन्फ़िगर करें अस्वीकार करें