Inheritance in PHP – OOPS में Inheritance एक ऐसी प्रक्रिया होती है, जिसका प्रयोग Codes की Reusability की सुविधा प्रदान करता है, जिससे अलग-अलग Projects में समान प्रकार की जरूरतों को पूरा करने के लिए हमें बार-बार समान Code को नहीं लिखना होता, बल्कि हम एक ही Code को अपनी जरूरत के अनुसार बार-बार Reuse कर सकते हैं।
साथ ही हम हमारी जरूरत के अनुसार किसी Predefined Actual Codes के साथ किसी भी प्रकार की छेडछाड किए बिना, नए Codes को भी Define कर सकते हैं, जो कि नई प्रकार की Functionality Provide करता है।
उदाहरण के लिए हमने पिछले Section में Box नाम की एक Class Create की थी। ये Class किसी Box Object को Create करता है, उसके Data को Set करने की सुविधा देता है और Object के Data को Display करने की सुविधा प्रदान करता है।
यदि हम चाहें तो इस Class के साथ __clone() Method का प्रयोग करके किसी Object का Clone Create कर सकते हैं और उस Create होने वाले Clone के मान में परिवर्तन करते हुए Create होने वाले Object के सभी Data Members के मानों को 0 Set कर सकते हैं।
हमारी उपरोक्त Class पूरी तरह से ठीक है और सामान्य रूप से काम कर रही है, इसलिए इस Class के Codes को छेडने की जरूरत नहीं है। लेकिन मानलो अब हम Create किए जाने वाले हर Object का Volume Calculate करने की सुविधा भी प्राप्त करना चाहते हैं।
इस सुविधा को प्राप्त करने के लिए हम हमारी Box Class के Codes में किसी तरह का Modification किए बिना भी इस Capability को Extend करना चाहते हैं। Box Class को इस Capability के साथ Extend करने के लिए हम PHP के extends Keyword का प्रयोग कर सकते हैं।
यानी PHP हमें किसी Class की Capabilities को Extend करने के लिए extends नाम का Keyword Provide करता है। इस Keyword का प्रयोग करके हम PHP में Inheritance की सुविधा प्राप्त करते हैं। ये Keyword Java से Inspired है। यानी Java में भी Inheritance की सुविधा प्राप्त करने के लिए हमें extends Keyword का ही प्रयोग करना होता है।
PHP में Inheritance की सुविधा प्राप्त करने के लिए हम एक नई Class बनाते हैं और उस नई Class में पहले से बनी हुई Class के सभी Data Members व Methods को प्राप्त करने के लिए extends Keyword का प्रयोग करते हैं।
पहले से बनी हुई Class को सामान्यतः Base Class या Super Class कहा जाता है जबकि बनाई जाने वाली नई Class को Derived Class या Sub-Class कहा जाता है।
यानी यदि हम Volume Calculate करने की नई Functionality को प्राप्त करने के लिए एक नई Class बनाते हैं, तो हम पहले से बनी हुई Box Class को Base Class के रूप में Use कर सकते हैं।
जब हम Box Class को Base Class के रूप में Use करते हैं, तो Box Class द्वारा Provide की जाने वाली सभी Functionalities जैसे कि Object के Height, Width व Length को Store व Display करने अथवा Modified Clone Create करने की सुविधा प्राप्त करने के लिए हमें बनने वाली नई Class में फिर से इन Functionalities के लिए Methods लिखने की जरूरत नहीं है, बल्कि हम Box Class के Methods व Data Members को ही बिना Specify किए हुए अपनी नई Sub-Class या Derived Class में Directly Use कर सकते हैं।
यानी हम पहले से बनी हुई हमारी Box Class को बिना Modify किए हुए उसके सभी Features को बनाई जाने वाली नई Class में ज्यों का त्यों प्राप्त कर सकते हैं और उसमें नए Features Add करके Base Class की Extended Functionalities को नई बनने वाली Class के रूप में प्राप्त कर सकते हैं।
PHP में पहले से बनी हुई Class के Features को Extend करने के लिए या दूसरे शब्दों में कहें तो PHP में Inheritance की सुविधा प्राप्त करने के लिए हम PHP के निम्न Inheritance Syntax का प्रयोग करना होता हैः
class SubClassName extends SuperClassName { // New Class Codes Here }
इस Syntax के आधार पर यदि हम अपनी Box Class से एक नई Class NewBox को Extend करना चाहें, तो हमारा Statement निम्नानुसार होगाः
class NewBox extends Box{ // New Class Codes Here }
चलिए, हम एक उदाहरण द्वारा PHP में Inheritance की सुविधा प्राप्त करने की पूरी क्रियाविधी को समझने की कोशिश करते हैं। हमारा Program निम्नानुसार हैः
<?php //Super Class or Base Class class Box { private $height, $width, $length; public function set($property, $value){ $this->$property = $value; } public function get($property){ return $this->$property; } public function display(){ echo "\nHeight: ". $this->height; echo "\nWidth: " . $this->width ; echo "\nLength: " . $this->length ; } } //Subclass or Derived Class class NewBox extends Box{ public function volume(){ return $this->get('height') * $this->get('width') * $this->get('length'); } } $cpuCabinet = new NewBox(); //Setting Values $cpuCabinet->set('height', 10); $cpuCabinet->set('width', 20); $cpuCabinet->set('length', 30); //Getting Values Echo "CPU Cabinet"; $cpuCabinet->display(); Echo "\n\nVolume of the cpuCabinet Object: " . $cpuCabinet->volume(); ?> //Output CPU Cabinet Height: 10 Width: 20 Length: 30 Volume of the cpuCabinet Object: 6000
इस Program में हमने Box नाम की एक Base Class बनाई है जिसमें height, width व length नाम के तीन Private Data Members हैं तथा get(), set() व display() नाम के तीन Public Methods हैं, जो Object की Properties के लिए Values Accept करने, Return करने व Display करने का काम करते हैं।
फिर हमने NewBox नाम की एक नई Class बनाई है और इस Class में हमने Box Class को Derive कर लिया है। परिणामस्वरूप Base Box Class के सभी Public Members इस नई Derived Class में Inherit हो गए हैं। यानी हम Base Class के Public Methods को इस Derived Class में Directly Access कर सकते हैं।
फिर हमने NewBox Class का एक Object $cpuCabinet Create किया है और इस NewBox की Height, Width व Length Set करने के लिए हमने set() नाम के Method को Call किया है।
हालांकि हमने हमारी NewBox Derived Class में get(), set() या display() में से किसी भी Method को Define नहीं किया है, लेकिन फिर भी हम इस NewBox Class के Objects के लिए इन Methods को Call कर सकते हैं और हम ऐसा इसलिए कर सकते हैं, क्योंकि हमने Box Class को NewBox Class में extends Keyword का प्रयोग करके Inherit किया है इसलिए ये सभी Methods NewBox Class के किसी भी Object के लिए Directly Available हैं।
जब हम NewBox Type का Object Create करते हैं और उसमें किसी Value को Set करते हैं, तो PHP Automatically उन Values को Store करने के लिए Current Class में Variables खोजता है।
चूंकि NewBox Class में height, width या length नाम को कोई Variable Declared नहीं है, इसलिए ये Method Automatically अपनी Parent Class यानी Box Class में इन Data Members को Find करता है।
चूंकि ये Data Members Box Class में Defined हैं, इसलिए ये set() Method NewBox Object cpuCabinet के लिए Specify किए गए Data Members के मानों को Base Class के Variables में Store कर देता है।
फिर जब cpuCabinet Object के Data Members की Values को Display करने के लिए display() Method Call किया जाता है, तब फिर से उपरोक्त Paragraph में Specified प्रक्रिया होती है, क्योंकि Base Class के Members Derived Class के Object के लिए Available होते हैं। परिणामस्वरूप Base Class का display() Method Call होता है, और cpuCabinet Object के Data Members की Values को Display कर देता है।
अब हम Derived Class यानी NewBox Class पर आते हैं। NewBox Class में हमने केवल एक volume() नाम का Method Create किया है। ये Method Base Class के Data Members height, width व length को प्राप्त करने के लिए अपनी Parent Class के get() Method को $this->get() Expression द्वारा Call करता है। हम जानते हैं कि $this हमेंशा Current Objet को Represent करता है, आज जब हम Current Object के लिए get() Method को Call करते हैं, तो वास्तव में ये Method Base Class से Call होता है, क्योंकि Base Class का get() Method Derived Class में Inherited है।
मूल रूप से समझने वाली बात ये है कि जब हम Derived Class का Object Create करते हैं, तब उस Object के साथ Invoke किए जाने वाले सभी Methods को PHP सबसे पहले Derived Class में ही खोजता है। यदि Derived Class में वह Method नहीं मिलता है, तो PHP उस नाम के Method को Base Class में खोजता है।
चूंकि उपरोक्त Program में हमने Derived Class के Object cpuCabinet के लिए get() Method व set() Method को Call किया है जबकि हम देख सकते हैं कि ये दोनों ही Methods Derived Class में Available नहीं हैं। इसलिए जब PHP को ये Methods Current Class यानी NewBox Class में नहीं मिलते, तो PHP इन Methods को अपनी Parent Class में खोजता है, जहां उसे ये Methods मिल जाते हैं और PHP इन Methods को वहां से Call करके cpuCabinet Object के Data Members को Get व Set करता है।
चूंकि Super Class Box में हमने height, width व length Data Members को Private Scope में रखा है, इसलिए इन Data Members को हम Base Class से बाहर किसी भी स्थिति में Directly Access नहीं कर सकते।
इसीलिए हमने Base Class के get() Public Method को Derived Class के volume() Method में Call किया है। क्योंकि केवल यही एक ऐसा Method है, जो Base Class के Private Data Members को Access करने की सुविधा दे रहा है।
यहां तक तो स्थिति ठीक है, लेकिन यदि हम हमारी नई बनाई जाने वाली Class में कोई नया Data Member भी Create करते हैं, तब हम उपरोक्त Program के अनुसार अपनी Requirements को पूरा नहीं कर सकते, बल्कि उस स्थिति में हमें कई नए काम करने पडेंगे और Base Class के कई Methods को Derived Class में Override करना पडेगा।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook PHP in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
PHP in Hindi | Page: 647 | Format: PDF