यदि मैं PHP में अमूर्त वर्ग का उपयोग करता हूं तो क्या फायदा है? मैं उस पर कुछ भी अच्छा नहीं मिल सकता। मुझे लगता है कि मैं अमूर्त वर्ग का उपयोग करके आसानी से सभी काम कर सकता हूं?
आप स्वाभाविक रूप से कर सकते हैं। हालांकि, अगर ऐसी कई वस्तुएं हैं जो काफी समान हैं, तो यह सामान्य कार्यक्षमता को "आधार" वर्ग में निकालने में मदद कर सकती है, जिसका अर्थ है कि आपको उस तर्क को डुप्लिकेट करने की आवश्यकता नहीं है।
वास्तव में दो कारण हैं। मेरे लिए पहला कारण यह होगा कि आपके सार वर्ग के सभी वंशजों को समान प्रकार है, और दोनों सटीक एक ही इंटरफ़ेस का पालन करते हैं। इसका मतलब है कि उदाहरण के लिए एक पीडीएफ दस्तावेज में एक डॉक्स दस्तावेज़ के समान इंटरफ़ेस होगा, और क्लाइंट कोड को यह ध्यान रखना होगा कि यह किस ऑब्जेक्ट को संभालने में सक्षम है। संक्षिप्त उदाहरण (PHP में)।
<?php
abstract class Document {
protected $author;
public function __construct($author) {
$this->author = $author;
}
abstract public function render();
public function author() {
return $this->author;
}
}
class PdfDocument extends Document {
public function render() {
// do something PDF specific here.
}
}
class DocxDocument extends Document {
public function render() {
// do something DOCX specific here.
}
}
class DocumentHandler {
public function handle(Document $document) {
$this->log('Author has been read ' . $document->author());
return $document->render();
}
}
सबसे पहले; इस तथ्य को ध्यान में रखें कि दस्तावेज़हैंडलर क्लास का कोई ज्ञान नहीं है कि यह वास्तव में किस प्रकार का दस्तावेज़ है। यह भी परवाह नहीं करता है। यह अज्ञानी है। हालांकि, यह जानता है कि किन विधियों पर कॉल किया जा सकता है, क्योंकि दो प्रकार के दस्तावेज़ों के बीच इंटरफ़ेस समान हैं। इसे पॉलिमॉर्फिज्म कहा जाता है, और दस्तावेज़ इंटरफ़ेस के कार्यान्वयन के साथ आसानी से हासिल किया जा सकता है।
दूसरा भाग है; यदि प्रत्येक दस्तावेज़ में एक लेखक होता है, और उस लेखक से हमेशा अनुरोध किया जाता है, तो आप विधि को पीडीएफडी दस्तावेज़ के साथ-साथ डॉक्स डॉक्यूमेंट पर कॉपी कर सकते हैं, लेकिन आप स्वयं को डुप्लिकेट कर रहे हैं। उदाहरण के लिए, यदि आप निर्णय लेते हैं कि आप चाहते हैं कि लेखक राजधानियों के साथ लिखे जाएं, और आप इस $ - $ लेखक को ucwords ($ this-> लेखक) में बदल देंगे, तो आपको इसे जितनी बार करना होगा, उस विधि की प्रतिलिपि बनाई है। एक अमूर्त वर्ग का उपयोग करके, आप वर्ग को अपूर्ण के रूप में चिह्नित करते समय व्यवहार को परिभाषित कर सकते हैं। यह बहुत आसान में आता है।
आशा है कि मदद करता है।
स्रोत
2011-06-16 14:21:46
अधिक: http://stackoverflow.com/search?q=abstract+class+interface+php – Gordon
हां मैं समझता हूं .. प्रश्न लिखने के दस मिनट बाद मैंने – Sreeraj
बह को बंद करना चाहते हैं? :( –