2011-12-18 1 views
8

में इंटरफेस का उपयोग करने के मैं हमेशा एक कठिन समय था जबजब पीएचपी

मैं तुम्हें क्या समझ से (अन्य भाषाओं मैं कल्पना हो सकता है) PHP में वस्तुओं के साथ कोडिंग इंटरफेस के वास्तविक मूल्य को समझने पड़ा है एक Interface का उपयोग लागू करने के लिए या गारंटी दें कि जब कोई कक्षा Interface का उपयोग कर रही है कि उस वर्ग के उस श्रेणी के अंदर Interface में परिभाषित विधियां होंगी।

तो मेरे उपयोग के बारे में मेरे ज्ञान के ज्ञान से, इसका मतलब यह नहीं होगा कि आपको केवल Interface लाभकारी मिलेगा जब 1 वर्ग को परिभाषित करते समय उन तरीकों की आवश्यकता होगी?

अधिक स्पष्ट होने के लिए, यदि मेरे पास एक वर्ग है जो एक चीज करता है और किसी अन्य वर्ग को उस तरह की चीज करने की आवश्यकता नहीं है, तो उस वर्ग पर Interface का उपयोग करना व्यर्थ होगा?

तो आप प्रत्येक कक्षा पर Interface का उपयोग नहीं करेंगे?

पी एस) आप exact duplicate के रूप में इस सवाल का वोट तो आप सवाल और केवल शीर्षक के रूप में मैं इसी तरह के सवाल के सबसे पढ़ा है पढ़ा नहीं था पहले से ही

+2

यह आपके मामले में दिलचस्प हो सकता है: http://stackoverflow.com/questions/20463/what-is-the-point-of-interfaces-in-php – Quasdunk

+3

हां, इंटरफ़ेस के लिए बहुत कम लाभ है यदि आप पता है कि केवल इसके लिए एक ही कार्यान्वयन होने जा रहा है। –

+0

@Quasdunk जो इस विषय के बारे में बेहतर पढ़ता है, धन्यवाद – JasonDavis

उत्तर

10

मैं क्या समझ से आप के लिए एक इंटरफेस का उपयोग को लागू या गारंटी दें कि जब कोई कक्षा इंटरफ़ेस का उपयोग कर रही है कि उस वर्ग के अंदर इंटरफ़ेस में परिभाषित विधियां होंगी।

यह वास्तव में सौदा (तकनीकी हिस्सा) का केवल आधा है। वहाँ भी सभी महत्वपूर्ण वास्तु आधा है, जो प्रकट होता है जब आप इंटरफ़ेस का उपभोग है और यह इस प्रकार है:

function feed(IAnimal $interface) { 
    // ... 
} 

(वैकल्पिक रूप से, एक "फैक्टरी" समारोह है कि प्रलेखित है एक उदाहरण है कि IAnimal होगा लागू करता है वापस जाने के लिए एक उदाहरण के रूप में भी काम करते हैं)।

यहां विचार यह है कि इंटरफ़ेस का उपभोक्ता कहता है: "मैं एक जानवर को खिलाना चाहता हूं। मुझे परवाह नहीं है कि यह उड़ता है, चलता है या क्रॉल करता है। मुझे परवाह नहीं है कि यह बड़ा या छोटा है। केवल यह ध्यान रखें कि यह अन्य सभी जानवरों के साथ कुछ विशेषताओं को साझा करता है "- विशेषताएं जिसमें इंटरफ़ेस की परिभाषा शामिल होगी।

दूसरे शब्दों में, इंटरफेस कंक्रीट कार्यान्वयन (कक्षाओं) से अनुबंध (इंटरफेस) को अमूर्त करने के लिए काम करते हैं। यह कंक्रीट कक्षाओं के कार्यान्वयनकर्ताओं को इंटरफ़ेस के उपयोगकर्ताओं के लिए कोड तोड़ने के बिना कार्यान्वयन, नाम बदलने, हटाने और कार्यान्वयन जोड़ने के लिए एक स्वतंत्र हाथ प्रदान करता है, यदि आप अपने एपीआई में सीधे कंक्रीट कक्षाओं का संदर्भ दे रहे हैं तो ऐसा कुछ भी संभव नहीं है।

इंटरफ़ेस के लिए केवल एक वर्ग द्वारा लागू किया गया है: यह निर्णय लेने के लिए पर्याप्त जानकारी नहीं है। यदि भविष्य में इंटरफ़ेस के अधिक कार्यान्वयन संभवतः हो सकते हैं, तो यह निश्चित रूप से समझ में आता है (उदाहरण के लिए: IHashFunction इंटरफ़ेस तब भी समझ में आएगा जब Sha1HashFunctionवर्तमान में केवल उपलब्ध कार्यान्वयन था)। अन्यथा यह कुछ भी पेशकश नहीं करता है।

+0

इसका जवाब देने के लिए समय निकालने के लिए धन्यवाद, मुझे पता है ऐसा लगता है कि यह सवाल है एसओ भर में भरे हुए लेकिन कई जवाब अच्छे नहीं हैं। – JasonDavis

+0

@jasondavis: दुर्भाग्यवश में यह एक समस्या है ... और धन्यवाद। – Jon

+1

मुझे प्लग और आउटलेट के बारे में लगता है। आउटलेट के साथ काम करने के लिए, आपको पता होना चाहिए कि आउटलेट में अपने प्लग को कैसे काम करना है (उदाहरण के लिए तीन prong, लेकिन एडाप्टर समेत एक बड़ी विविधता है), लेकिन दीवार को छोड़ने के बाद आप उस प्लग के साथ क्या करते हैं डिवाइस तक। बहुत सारी विविधता तीन (या दो मेरे पूरे-तालाब दोस्तों के लिए) प्रोजे प्लग से बाहर आती है, लेकिन इसकी जड़ पर यह अभी भी एक तीन prong डिवाइस है। एक सार वर्ग को सिस्टम (नेटवर्क किए गए धुएं डिटेक्टर) में कड़ी मेहनत के रूप में देखा जा सकता है लेकिन यह कार्य में कुछ हद तक स्वतंत्र भी है। –