PHP में OOP के कई इंटरफेस
PHP में बहुवंशानुक्रम नहीं है - प्रत्येक
कक्षा का केवल एक ही मूल वर्ग हो सकता है।
हालाँकि, इंटरफेस के साथ स्थिति अलग है:
प्रत्येक कक्षा किसी भी संख्या में इंटरफेस
लागू कर सकती है। इसके लिए, इंटरफेस के नामों को
कीवर्ड implements के बाद अल्पविराम से
अलग करके सूचीबद्ध करना होगा।
यह अमूर्त वर्गों से इंटरफेस का एक और अंतर है - आप कई इंटरफेस लागू कर सकते हैं, लेकिन कई अमूर्त वर्गों को विरासत में नहीं ले सकते।
आइए व्यवहार में कोशिश करते हैं। मान लीजिए कि
इंटरफेस iFigure के अलावा, हमारे पास
इंटरफेस iTetragon भी है।
इस इंटरफेस के तरीकों को Quadrate और Rectangle
कक्षाएं लागू करेंगी,
क्योंकि उनमें 4 भुजाएँ होती हैं, लेकिन Disk
कक्षा नहीं करेगी।
मान लीजिए कि इंटरफेस iTetragon चतुर्भुज की
सभी चारों भुजाओं के लिए गेटर्स का वर्णन करता है:
<?php
interface iTetragon
{
public function getA();
public function getB();
public function getC();
public function getD();
}
?>
मान लीजिए कि हमारे पास इंटरफेस iFigure
भी है, जो हमने पहले बनाया था:
<?php
interface iFigure
{
public function getSquare();
public function getPerimeter();
}
?>
आइए Quadrate कक्षा को बनाएं ताकि यह
दो इंटरफेस लागू करे। इसके लिए, कीवर्ड
implements के बाद दोनों इंटरफेस को अल्पविराम से
अलग करके सूचीबद्ध करें:
<?php
class Quadrate implements iFigure, iTetragon
{
// यहां कार्यान्वयन होगा
}
?>
अब हम अपनी Quadrate कक्षा को संशोधित करेंगे,
ताकि यह इंटरफेस iTetragon लागू कर सके।
स्पष्ट है कि हमारा वर्ग एक चतुर्भुज का एक विशेष
मामला है, क्योंकि वर्ग की सभी भुजाएँ बराबर होती हैं। इसलिए सभी नए तरीके
एक ही चीज़ लौटाएंगे - वर्ग की चौड़ाई:
<?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 भुजाएँ अलग-अलग होंगी।
हालाँकि, इससे कोई फर्क नहीं पड़ता कि हम किस आकृति पर विचार करेंगे - महत्वपूर्ण बात यह है कि इन सभी आकृतियों में वर्णित तरीके होंगे (भले ही कुछ आकृतियाँ विशेष हों) और वे एक जैसे तरीके से काम करेंगी।
ऐसा बनाएं कि Rectangle कक्षा
भी दो इंटरफेस लागू करे: iFigure,
और iTetragon।
इंटरफेस iCircle बनाएं जिसमें तरीके
getRadius और getDiameter हों।
ऐसा बनाएं कि Disk कक्षा भी
दो इंटरफेस लागू करे: iFigure,
और iCircle।