ভূমিকা
ইনহেরিটেন্স অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং মেথডোলজির একটি গুরুত্বপূর্ণ নীতি। এই নীতি ব্যবহার করে দুটি ক্লাসের মধ্যে সম্পর্ক স্থাপন করা যায়। PHP তার অবজেক্ট মডেলে ইনহেরিটেন্স সাপোর্ট করে।
PHP extends কিওয়ার্ড ব্যবহার করে দুটি ক্লাসের মধ্যে সম্পর্ক স্থাপন করে।
সিনট্যাক্স
class B extends A
যেখানে A হলো বেস ক্লাস (প্যারেন্ট ক্লাসও বলা হয়) এবং B হলো সাবক্লাস বা চাইল্ড ক্লাস। চাইল্ড ক্লাস প্যারেন্ট ক্লাসের পাবলিক এবং প্রোটেক্টেড মেথড ইনহেরিট করে। চাইল্ড ক্লাস ইনহেরিট করা যেকোনো মেথড রিডিফাইন বা ওভাররাইড করতে পারে। না করলে, ইনহেরিট করা মেথডগুলো প্যারেন্ট ক্লাসে ডিফাইন করা ফাংশনালিটিই ধারণ করবে, চাইল্ড ক্লাসের অবজেক্টের সাথে ব্যবহৃত হলে।
প্যারেন্ট ক্লাসের ডেফিনিশন চাইল্ড ক্লাসের ডেফিনিশনের আগে থাকতে হবে। এই কেসে, A ক্লাসের ডেফিনিশন স্ক্রিপ্টে B ক্লাসের ডেফিনিশনের আগে আসতে হবে।
উদাহরণ
<?php
class A{
//properties, constants and methods of class A
}
class B extends A{
//public and protected methods inherited
}
?>
যদি অটোলোডিং সক্রিয় থাকে, প্যারেন্ট ক্লাসের ডেফিনিশন ক্লাস স্ক্রিপ্ট লোড করে পাওয়া যায়।
ইনহেরিটেন্স উদাহরণ
নিচের কোড দেখায় চাইল্ড ক্লাস প্যারেন্ট ক্লাসের পাবলিক এবং প্রোটেক্টেড মেম্বার ইনহেরিট করে:
উদাহরণ
<?php
class parentclass{
public function publicmethod(){
echo "This is public method of parent class\n" ;
}
protected function protectedmethod(){
echo "This is protected method of parent class\n" ;
}
private function privatemethod(){
echo "This is private method of parent class\n" ;
}
}
class childclass extends parentclass{
public function childmethod(){
$this->protectedmethod();
//$this->privatemethod(); //this will produce error
}
}
$obj=new childclass();
$obj->publicmethod();
$obj->childmethod();
?>
আউটপুট
এটি নিচের ফলাফল তৈরি করবে:
This is public method of parent class This is protected method of parent class PHP Fatal error: Uncaught Error: Call to private method parentclass::privatemethod() from context 'childclass'
মেথড ওভাররাইডিং উদাহরণ
যদি প্যারেন্ট ক্লাস থেকে ইনহেরিট করা একটি মেথড চাইল্ড ক্লাসে রিডিফাইন করা হয়, নতুন ডেফিনিশন পুরনো ফাংশনালিটি ওভাররাইড করে। নিচের উদাহরণে, publicmethod চাইল্ড ক্লাসে আবার ডিফাইন করা হয়েছে:
উদাহরণ
<?php
class parentclass{
public function publicmethod(){
echo "This is public method of parent class\n" ;
}
protected function protectedmethod(){
echo "This is protected method of parent class\n" ;
}
private function privatemethod(){
echo "This is private method of parent class\n" ;
}
}
class childclass extends parentclass{
public function publicmethod(){
echo "public method of parent class is overridden in child class\n" ;
}
}
$obj=new childclass();
$obj->publicmethod();
?>
আউটপুট
এটি নিচের ফলাফল তৈরি করবে:
public method of parent class is overridden in child class
হায়ারার্কিক্যাল ইনহেরিটেন্স
PHP মাল্টিপল ইনহেরিটেন্স সাপোর্ট করে না। তাই একটি ক্লাস দুই বা অধিক ক্লাস এক্সটেন্ড করতে পারে না। তবে, এটি হায়ারার্কিক্যাল ইনহেরিটেন্স সাপোর্ট করে:
উদাহরণ
<?php
class A{
function test(){
echo "method in A class";
}
}
class B extends A{
//
}
class C extends B{
//
}
$obj=new C();
$obj->test();
?>
আউটপুট
এটি নিচের ফলাফল দেখাবে:
method in A class