PHP में OOP में क्लास इनहेरिटेंस और इंटरफेस इम्प्लीमेंटेशन
एक क्लास दूसरी क्लास से इनहेरिट कर सकती है और साथ ही कुछ इंटरफेस को इम्प्लीमेंट भी कर सकती है। आइए एक प्रैक्टिकल उदाहरण से समझते हैं।
मान लीजिए हम एक क्लास Programmer बनाना चाहते हैं,
जिसमें नाम, वेतन और उन प्रोग्रामिंग भाषाओं की सूची होगी
जो प्रोग्रामर जानता है।
अभी हमारे क्लास का विवरण काफी अस्पष्ट है:
हाँ, क्लास में नाम, वेतन, भाषाएँ होंगी -
लेकिन हमारे क्लास में कौन से मेथड होंगे?
आइए इंटरफेस iProgrammer की मदद से
अपने क्लास को अधिक सटीकता से परिभाषित करें:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
मान लीजिए हमने अपने पहले से बने क्लासेस में खोजबीन की
और पता चला कि हमारे पास पहले से ही एक ऐसा ही
क्लास Employee मौजूद है। यह Programmer क्लास के सभी
मेथड्स को इम्प्लीमेंट नहीं करता, लेकिन कुछ हिस्सा करता है।
हमारे पास पहले से मौजूद क्लास का कोड यहाँ है:
<?php
class Employee
{
private $name;
private $salary;
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
public function getName()
{
return $this->name;
}
public function getSalary()
{
return $this->salary;
}
}
?>
हमारे मामले में यह तार्किक होगा कि
हमारा नया क्लास Programmer, Employee क्लास से
आवश्यक मेथड्स का एक हिस्सा इनहेरिट कर ले
(और बाकी हिस्सा हम बाद में
नए क्लास में खुद इम्प्लीमेंट करेंगे):
<?php
class Programmer extends Employee
{
}
?>
साथ ही हमें पता है कि Pogrammer क्लास को
iProgrammer इंटरफेस को
इम्प्लीमेंट करना चाहिए:
<?php
class Programmer implements iProgrammer
{
}
?>
आइए Employee क्लास से इनहेरिटेंस और
iProgrammer इंटरफेस की इम्प्लीमेंटेशन को एक साथ जोड़ते हैं:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
ऐसा होगा कि हमारा Pogrammer क्लास
Employee क्लास से __construct, getName और getSalary
मेथड्स को इनहेरिट कर लेगा,
और addLang और getLangs
मेथड्स को हमें खुद इम्प्लीमेंट करना होगा:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// इम्प्लीमेंटेशन
}
public function getLangs()
{
// इम्प्लीमेंटेशन
}
}
?>
iProgrammer इंटरफेस को इससे कोई फर्क नहीं पड़ता,
क्लास के मेथड्स अपने हैं या इनहेरिट किए गए हैं
- मुख्य बात यह है कि सभी वर्णित मेथड्स
इम्प्लीमेंटेड होने चाहिए।
मेरे Employee क्लास का कोड
और iProgrammer इंटरफेस का कोड कॉपी करें। मेरे
Programmer क्लास के खाके को कॉपी न करें -
मेरे कोड में न देखकर इस
क्लास को स्वयं इम्प्लीमेंट करें।