PHP Interfaces
Interfaces आपको यह specify करने की अनुमति देते हैं कि क्लास को किन तरीकों को लागू करना चाहिए।
Interfaces एक ही तरह से कई अलग-अलग क्लास का उपयोग करना आसान बनाता है। जब एक या एक से अधिक क्लास एक समान यानि की same interface का उपयोग करते हैं, तो इसे "polymorphism" कहा जाता है।
interface
कीवर्ड द्वारा इंटरफेस घोषित किया जाता है।
Interfaces v/s Abstract Classes
Interface एक abstract क्लास के समान होता है। Interface औरabstract क्लास के बीच अंतर निम्नलिखित हैं:
- Interfaces में प्रॉपर्टीज नहीं सकते हैं, जबकि एक abstract क्लास में हो सकते हैं
- सभी interface मेथड public होनी चाहिए, जबकि abstract क्लास की मेथड public या protected हो सकते हैं
- एक interface में ऐसी मेथड होती हैं जिनका कोई implementations नहीं होता है, जिसका अर्थ है कि
interface क्लास के सारे मेथड abstract मेथड होते हैं और ना ही
abstract
कीवर्ड की आवश्यकता पड़ती है। - Interfaces क्लास से अलग होते हैं क्योंकि वर्ग केवल एक क्लास से inherit हो सकता है जबकि क्लास एक या अधिक interfaces को लागू कर सकता है।
एक interface को लागू करने के लिए, एक क्लास को implements
कीवर्ड का उपयोग करना पड़ता है।
<?phpinterface MyInterfaceName{ public function methodFirst(); public function methodSecond(); public function methodThird();}?>
ऊपर Syntax में हम देख सकते हैं हमने तीन फंक्शन बनाया methodFirst
, methodSecond
and methodThird
और उन तीनों मेथड में हमने कोई कोड implement नहीं किया
जैसे हमने पिछले चैप्टर PHP Abstract Classes मैं पढ़ा था अगर किसी मेथड में कोई कोड implement नहीं होता है तो वह एक abstract क्लास होती है बशर्ते उस मेथड के आगे abstract कीवर्ड का इस्तेमाल किया जाए। लेकिन यहां पर हम abstract कीवर्ड का इस्तेमाल नहीं कर रहे हैं फिर भी यह एक abstract मेथड जैसा काम कर रहा है
<?phpinterface Books{ public function titleName();}
class Maths implements Books{ public function titleName(){ echo "Encyclopedias of Mathematics"; }}
$maths = new Maths();$maths->titleName();?>
<?php// Interface interface Books{ public function titleName();}
// Class class Maths implements Books{ public function titleName(){ echo "Encyclopedias of Mathematics </br>"; }}
class Physics implements Books{ public function titleName(){ echo "Fundamentals of Physics </br>"; }}
class Finance implements Books{ public function titleName(){ echo "Rich Dad Poor Dad"; }}
// Create a list of books$maths = new Maths();$physics = new Physics();$finance = new Finance();$books = array($maths, $physics, $finance);
foreach ($books as $book){ $book->titleName();}?>
Encyclopedias of MathematicsFundamentals of PhysicsRich Dad Poor Dad
Maths, Physics और Finance सभी क्लास हैं जो Books इंटरफ़ेस को implement करते हैं, जिसका अर्थ है कि वे सभी
titleName()
मेथड का उपयोग करके बुक के टाइटल को प्रिंट कराने में सक्षम हैं।
<?php// Interface interface Books{ public function titleName(); public function authorName(); public function price();}
// Class class Maths implements Books{ public function titleName(){ echo "Encyclopedias of Mathematics </br>"; } public function authorName(){ echo "James Stuart Tanton </br>"; } public function price(){ echo "Rs.9,393"; }}
class Finance implements Books{ public function titleName(){ echo "Rich Dad Poor Dad </br>"; } public function authorName(){ echo "Robert T. Kiyosaki </br>"; } public function price(){ echo "Rs.260"; }}
$maths = new Maths();$maths->titleName();$maths->authorName();$maths->price();
echo "</br></br>";
$finance = new Finance();$finance->titleName();$finance->authorName();$finance->price();?>
Encyclopedias of MathematicsJames Stuart TantonRs.9,393
Rich Dad Poor DadRobert T. KiyosakiRs.260
ऊपर दिए गए उदाहरण में हमने तीन public फंक्शन बनाया titleName(), authorName() और price() अब तीनों को हम अलग-अलग क्लास Maths और Finance में इंप्लीमेंट किया है।
जैसे कि ऊपर दिए गए उदाहरण में Books इंटरफेस में हमने तीन फंक्शन बनाया है, इसका अर्थ है कि जब भी कभी हम किसी क्लास में Books को इंप्लीमेंट्स करेंगे तो हमें उस में बनाए गए तीनों फंक्शन को इस्तेमाल करना जरूरी होगा।
ऐसा नहीं हो सकता कि इंटरफ़ेस में हमने 3 मेथड का निर्माण किया और इंप्लीमेंट करते समय किसी क्लास में हम सिर्फ दो मेथड का हीं इस्तेमाल कर रहे हैं, अगर ऐसा करने की कोशिश करेंगे तो या एक error जनरेट करेगा।