PHP Inheritance: Object-Oriented Programming (OOP) की दुनिया में “Inheritance” एक बहुत ही महत्वपूर्ण कॉन्सेप्ट है। हिंदी में इसे “विरासत” कहा जाता है। इसका मतलब होता है कि एक class, दूसरी class की properties (गुण) और methods (क्रियाएं) को विरासत में ले सकती है।
Inheritance का उपयोग करके हम कोड को फिर से लिखने (Reusability) से बचते हैं और अपने प्रोग्राम को ज्यादा modular और manageable बना सकते हैं।
Php Inheritance क्या है?
Inheritance एक ऐसी प्रक्रिया है जिसमें एक class (जिसे हम Child Class या Derived Class कहते हैं) दूसरी class (जिसे हम Parent Class या Base Class कहते हैं) के गुणों और कार्यों को अपने अंदर शामिल (Inherit) कर सकती है।
उदाहरण के लिए, अगर हमारे पास एक class है Animal और उसमें एक method है makeSound(), तो हम एक और class बना सकते हैं Dog जो Animal से विरासत में makeSound() method को प्राप्त कर सकती है।
Basic Syntax of Inheritance:
PHP Inheritance को लागू करने के लिए extends कीवर्ड का उपयोग किया जाता है:
class ParentClass {
// properties and methods
}
class ChildClass extends ParentClass {
// additional properties and methods
}PHPTypes of Inheritance in PHP:
PHP मुख्य रूप से निम्न प्रकार की इनहेरिटेंस को सपोर्ट करता है:
- सिंगल इनहेरिटेंस (Single Inheritance): एक चाइल्ड क्लास केवल एक ही पैरेंट क्लास से विरासत प्राप्त कर सकती है।
- मल्टी-लेवल इनहेरिटेंस (Multi-level Inheritance): एक क्लास किसी अन्य क्लास से इनहेरिट कर सकती है जो पहले से ही किसी तीसरी क्लास से इनहेरिट कर चुकी हो।
- हायरार्किकल इनहेरिटेंस (Hierarchical Inheritance): एक पैरेंट क्लास से कई चाइल्ड क्लासेस इनहेरिट कर सकती हैं।
PHP मल्टीपल इनहेरिटेंस (एक क्लास का कई पैरेंट क्लासेस से इनहेरिट करना) को सीधे तौर पर सपोर्ट नहीं करता, लेकिन इसे ट्रेट्स (traits) का उपयोग करके प्राप्त किया जा सकता है।
Example of php Inheritance:
// पैरेंट क्लास
class Vehicle {
public $brand;
public $color;
public function __construct($brand, $color) {
$this->brand = $brand;
$this->color = $color;
}
public function displayInfo() {
echo "This is a {$this->color} {$this->brand} vehicle.<br>";
}
}
// चाइल्ड क्लास
class Car extends Vehicle {
public $model;
public function __construct($brand, $color, $model) {
parent::__construct($brand, $color);
$this->model = $model;
}
public function displayCarInfo() {
echo "This is a {$this->color} {$this->brand} {$this->model}.<br>";
}
}
// ऑब्जेक्ट बनाना और मेथड्स को कॉल करना
$vehicle = new Vehicle("Toyota", "Red");
$vehicle->displayInfo();
$car = new Car("Honda", "Blue", "City");
$car->displayInfo(); // पैरेंट क्लास का मेथड
$car->displayCarInfo(); // चाइल्ड क्लास का मेथड
PHPVehicleपैरेंट क्लास है जिसमें दो प्रॉपर्टीज ($brandऔर$color) और दो मेथड्स (__construct()औरdisplayInfo()) हैं।Carक्लासVehicleक्लास से इनहेरिट करती है और अपनी एक अतिरिक्त प्रॉपर्टी ($model) और मेथड (displayCarInfo()) जोड़ती है।Carक्लासVehicleक्लास के सभी पब्लिक और प्रोटेक्टेड मेम्बर्स को विरासत में प्राप्त करती है।
Parent Class के Constructor का उपयोग:
अगर parent class में कोई constructor होता है, तो child class उसे automatically विरासत में लेती है। लेकिन अगर child class में भी constructor लिखा गया है, तो हमें parent class का constructor manually call करना होगा। इसे मैन्युअली कॉल करने के लिए parent::__construct() का उपयोग करते हैं
<?php
class Person {
public function __construct() {
echo "Person class constructor calling<br>";
}
}
class Student extends Person {
public function __construct() {
parent::__construct(); // Parent class का constructor call
echo "Student class constructor calling<br>";
}
}
$obj = new Student();
?>
PHPAccess Modifiers and Php Inheritance:
PHP में तीन एक्सेस मॉडिफायर्स होते हैं जो इनहेरिटेंस को प्रभावित करते हैं:
- पब्लिक (Public): कहीं से भी एक्सेस किया जा सकता है, चाइल्ड क्लासेस द्वारा विरासत में मिलता है।
- प्रोटेक्टेड (Protected): केवल उसी क्लास और उसकी चाइल्ड क्लासेस द्वारा एक्सेस किया जा सकता है।
- प्राइवेट (Private): केवल उसी क्लास द्वारा एक्सेस किया जा सकता है, चाइल्ड क्लासेस द्वारा विरासत में नहीं मिलता।
class ParentClass {
public $publicVar = "Public";
protected $protectedVar = "Protected";
private $privateVar = "Private";
public function showVars() {
echo $this->publicVar."<br>";
echo $this->protectedVar."<br>";
echo $this->privateVar."<br>";
}
}
class ChildClass extends ParentClass {
public function showChildVars() {
echo $this->publicVar."<br>"; // एक्सेस होगा
echo $this->protectedVar."<br>"; // एक्सेस होगा
echo $this->privateVar."<br>"; // एरर आएगा (प्राइवेट वेरिएबल)
}
}PHPMethod Overriding:
चाइल्ड क्लास पैरेंट क्लास के मेथड्स को ओवरराइड (override) कर सकती है, यानी उसी नाम का मेथड डिफाइन करके उसका व्यवहार बदल सकती है:
class ParentClass {
public function showMessage() {
echo "Message from Parent Class.<br>";
}
}
class ChildClass extends ParentClass {
public function showMessage() {
echo "Message from Child Class.<br>";
}
}
$obj = new ChildClass();
$obj->showMessage(); // "Message from Child Class." प्रिंट होगाPHPअगर हम ओवरराइडिंग के बाद भी पैरेंट क्लास के मेथड को कॉल करना चाहें, तो parent:: का उपयोग कर सकते हैं:
public function showMessage() {
parent::showMessage();
echo "Additional message from Child Class.<br>";
}PHPFinal Keyword:
अगर हम चाहते हैं कि कोई मेथड चाइल्ड क्लास में ओवरराइड न हो सके, तो उसे final कीवर्ड से डिक्लेयर कर सकते हैं:
class ParentClass {
final public function importantMethod() {
echo "This method cannot be overridden.<br>";
}
}
class ChildClass extends ParentClass {
// यह एरर देगा क्योंकि importantMethod() फाइनल है
public function importantMethod() {
echo "Trying to override.<br>";
}
}PHPइसी तरह, पूरी क्लास को final डिक्लेयर करके उसकी इनहेरिटेंस को रोका जा सकता है:
final class FinalClass {
// class implementation
}
// यह एरर देगा क्योंकि FinalClass को इनहेरिट नहीं किया जा सकता
class ChildClass extends FinalClass {
}PHPAdvantages of Inheritance:
- Code Reusability – एक बार लिखे गए कोड को बार-बार उपयोग किया जा सकता है।
- Code Readability – Parent और Child के बीच संबंध समझना आसान होता है।
- Modular Structure – कोड को छोटे-छोटे logical हिस्सों में विभाजित किया जा सकता है।
- Easy Maintenance – जब Parent class में बदलाव करेंगे तो वह सारे child classes में प्रभाव डालेगा।
Disadvantages of Inheritance:
- टाइट कपलिंग (Tight Coupling): पैरेंट और चाइल्ड क्लासेस के बीच स्ट्रॉन्ग डिपेंडेंसी बन जाती है।
- क्लास हायरार्की कॉम्प्लेक्सिटी (Class Hierarchy Complexity): ज्यादा लेयर्स होने पर कोड समझना मुश्किल हो सकता है।
- मल्टीपल इनहेरिटेंस की कमी (Lack of Multiple Inheritance): PHP सीधे तौर पर मल्टीपल इनहेरिटेंस को सपोर्ट नहीं करता।
- ओवरराइडिंग के साइड इफेक्ट्स (Side Effects of Overriding): गलत तरीके से मेथड ओवरराइड करने से अनचाहे रिजल्ट्स मिल सकते हैं।
Conclusion:
PHP inheritance ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक शक्तिशाली फीचर है जो कोड की पुन: प्रयोज्यता और संरचना को बेहतर बनाता है। यह हमें रिलेशनशिप बेस्ड कोड ऑर्गनाइजेशन करने की अनुमति देता है। हालांकि, इनहेरिटेंस का उपयोग सावधानी से करना चाहिए क्योंकि गलत डिजाइन से कोड कॉम्प्लेक्स और मेंटेन करने में मुश्किल हो सकता है।
इनहेरिटेंस का उपयोग करते समय यह सुनिश्चित करें कि:
- पैरेंट और चाइल्ड क्लास के बीच “is-a” रिलेशनशिप हो (जैसे Car is a Vehicle)
- जरूरत से ज्यादा डीप इनहेरिटेंस हायरार्की से बचें
- कोड रियूज करने के लिए कंपोजिशन (composition) को भी एक विकल्प के रूप में विचार करें
इनहेरिटेंस का सही उपयोग PHP ऐप्लिकेशन को मॉड्यूलर, एक्स्टेंसिबल और मेंटेनेंस-फ्रेंडली बनाने में मदद करता है।


Welcome to HindiTutorials, your go-to platform for learning and mastering concepts in Hindi! Our mission is to make education accessible and simple for everyone by providing high-quality tutorials on programming, technology, and various other topics.