PHP Inheritance

PHP OOP - ইনহেরিটেন্স (Inheritance)


PHP - ইনহেরিটেন্স কী?

OOP-তে ইনহেরিটেন্স মানে হচ্ছে, একটি ক্লাস আরেকটি ক্লাস থেকে বৈশিষ্ট্য (property) ও মেথড (method) গ্রহণ করতে পারে।
চাইল্ড ক্লাস প্যারেন্ট ক্লাসের সব public ও protected প্রপার্টি ও মেথড পায়, আবার চাইলে নিজেরও আলাদা প্রপার্টি ও মেথড রাখতে পারে।

ইনহেরিটেড ক্লাস ডিফাইন করতে extends কীওয়ার্ড ব্যবহার করা হয়।


উদাহরণ

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}
 
// Strawberry ক্লাসটি Fruit থেকে ইনহেরিট করেছে
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
 
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message();
$strawberry->intro();
?>

ব্যাখ্যা

Strawberry ক্লাসটি Fruit ক্লাস থেকে ইনহেরিট করেছে।
তাই Strawberry ক্লাসে name, color, __construct()intro() পাওয়া যাচ্ছে।
এছাড়া Strawberry-তে নিজের আলাদা message() মেথডও আছে।


PHP - ইনহেরিটেন্স ও Protected অ্যাক্সেস মডিফায়ার

আগের অধ্যায়ে দেখেছি, protected প্রপার্টি বা মেথড শুধু ক্লাসের ভেতর ও ইনহেরিটেড ক্লাসে ব্যবহার করা যায়।
চলুন উদাহরণ দেখি:

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}
 
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
 
$strawberry = new Strawberry("Strawberry", "red"); // ঠিক আছে
$strawberry->message(); // ঠিক আছে
$strawberry->intro(); // ERROR: intro() protected, বাইরে থেকে কল করা যাবে না
?>

উপরের কোডে, বাইরে থেকে intro() কল করলে এরর হবে, কারণ এটি protected।


আরেকটি উদাহরণ, যেখানে চাইল্ড ক্লাসের ভেতর থেকে protected মেথড কল করা হয়েছে:

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}
 
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
    // চাইল্ড ক্লাসের ভেতর থেকে protected মেথড কল করা যাবে
    $this->intro();
  }
}
 
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message(); // ঠিক আছে, কারণ intro() চাইল্ড ক্লাসের ভেতর থেকে কল হয়েছে
?>

PHP - ইনহেরিটেড মেথড ওভাররাইড করা

চাইল্ড ক্লাসে প্যারেন্ট ক্লাসের মেথডের নাম রেখে নতুনভাবে ডিফাইন করলে, সেটি ওভাররাইড হয়ে যায়।

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}
 
class Strawberry extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram.";
  }
}
 
$strawberry = new Strawberry("Strawberry", "red", 50);
$strawberry->intro();
?>

এখানে Strawberry ক্লাসে intro()__construct() নতুনভাবে ডিফাইন করা হয়েছে, তাই প্যারেন্টেরটা ওভাররাইড হয়েছে।


PHP - final কীওয়ার্ড

final কীওয়ার্ড ব্যবহার করলে, সেই ক্লাস আর ইনহেরিট করা যাবে না, অথবা সেই মেথড ওভাররাইড করা যাবে না।

ক্লাস ইনহেরিট বন্ধ করার উদাহরণ

<?php
final class Fruit {
  // কিছু কোড
}
 
// নিচের কোডে এরর হবে
class Strawberry extends Fruit {
  // কিছু কোড
}
?>

মেথড ওভাররাইড বন্ধ করার উদাহরণ

<?php
class Fruit {
  final public function intro() {
    // কিছু কোড
  }
}
 
class Strawberry extends Fruit {
  // নিচের কোডে এরর হবে
  public function intro() {
    // কিছু কোড
  }
}
?>

© 2024 - 2025 React JS Bangla Tutorial.