PHP-এ OOP-এ একাধিক ইন্টারফেস

PHP-তে একাধিক ইনরিট্যান্স নেই - প্রতিটি ক্লাসের শুধুমাত্র একটি প্যারেন্ট থাকতে পারে। যাইহোক, ইন্টারফেসের ক্ষেত্রে বিষয়টি আলাদা: প্রতিটি ক্লাস যেকোনো সংখ্যক ইন্টারফেস বাস্তবায়ন করতে পারে। এটি করার জন্য, ইন্টারফেসের নামগুলি কীওয়ার্ড implements-এর পরে কমা দ্বারা আলাদা করে তালিকাভুক্ত করতে হবে।

এটি অ্যাবস্ট্রাক্ট ক্লাস থেকে ইন্টারফেসের আরেকটি পার্থক্য প্রকাশ করে - একাধিক ইন্টারফেস বাস্তবায়ন করা যায়, কিন্তু একাধিক অ্যাবস্ট্রাক্ট ক্লাস ইনহেরিট করা যায় না।

আসুন অনুশীলনে চেষ্টা করি। ধরুন যে ইন্টারফেস iFigure ছাড়াও আমাদের ইন্টারফেস iTetragon রয়েছে। এই ইন্টারফেসের মেথডগুলি বাস্তবায়ন করবে Quadrate এবং Rectangle ক্লাসগুলি, কারণ তাদের 4টি বাহু রয়েছে, কিন্তু Disk ক্লাসটি করবে না।

ধরুন ইন্টারফেস iTetragon描述了 চতুর্ভুজের চারটি বাহুর জন্য সমস্ত গেটার:

iTetragon.php<?php
  interface iTetragon
  {
    public function getA();
    public function getB();
    public function getC();
    public function getD();
  }
?>

ধরুন আমাদের কাছে iFigure ইন্টারফেসও রয়েছে, যা আমরা আগে তৈরি করেছি:

iFigure.php<?php
  interface iFigure
  {
    public function getSquare();
    public function getPerimeter();
  }
?>

আসুন Quadrate ক্লাসটি তৈরি করি যাতে এটি দুটি ইন্টারফেস বাস্তবায়ন করে। এটি করার জন্য, আসুন দুটি ইন্টারফেসকে কীওয়ার্ড implements-এর পরে কমা দ্বারা আলাদা করে তালিকাভুক্ত করি:

Quadrate.php<?php
  class Quadrate implements iFigure, iTetragon
  {
    // এখানে বাস্তবায়ন হবে
  }
?>

এখন আমাদের Quadrate ক্লাসটি উন্নত করি, যাতে এটি iTetragon ইন্টারফেস বাস্তবায়ন করে। এটা স্পষ্ট যে আমাদের বর্গক্ষেত্রটি একটি চতুর্ভুজের অধঃপতিত ক্ষেত্রে, কারণ বর্গক্ষেত্রের সব বাহু সমান। তাই সব নতুন মেথড একই জিনিস রিটার্ন করবে - বর্গক্ষেত্রের প্রস্থ:

Quadrate.php<?php
  class Quadrate implements iFigure, iTetragon
  {
    private $a;
    
    public function __construct($a)
    {
      $this->a = $a;
    }
    
    public function getA()
    {
      return $this->a;
    }
    
    public function getB()
    {
      return $this->a;
    }
    
    public function getC()
    {
      return $this->a;
    }
    
    public function getD()
    {
      return $this->a;
    }
    
    public function getSquare()
    {
      return $this->a * $this->a;
    }
    
    public function getPerimeter()
    {
      return 4 * $this->a;
    }
  }
?>

এটা স্পষ্ট যে আয়তক্ষেত্রে ইতিমধ্যেই সব বাহু একই নয়, শুধুমাত্র বিপরীত বাহুগুলি সমান। এই ক্ষেত্রে, নতুন মেথডগুলি কিছুটা ভিন্ন হবে। আচ্ছা, এবং কোনো ট্রাপিজয়েডে সাধারণভাবে সব 4টি বাহুই ভিন্ন হবে।

যাইহোক, আমরা কোন ধরনের আকার বিবেচনা করব তা গুরুত্বপূর্ণ নয় - গুরুত্বপূর্ণ হলো যে এই সমস্ত আকারগুলির বর্ণিত মেথড থাকবে (যদিও কিছু আকার অধঃপতিত) এবং একইভাবে কাজ করবে।

Задание 1

Rectangle ক্লাসটিও যাতে দুটি ইন্টারফেস বাস্তবায়ন করে তা করুন: iFigure, এবং iTetragon।

Задание 2

getRadius এবং getDiameter মেথড সহ iCircle ইন্টারফেস তৈরি করুন।

Задание 3

Disk ক্লাসটিও যাতে দুটি ইন্টারফেস বাস্তবায়ন করে তা করুন: iFigure, এবং iCircle।