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

इंटरफेस iCircle बनाएं जिसमें तरीके getRadius और getDiameter हों।

Задание 3

ऐसा बनाएं कि Disk कक्षा भी दो इंटरफेस लागू करे: iFigure, और iCircle।