यदि मैं PHP में एक इंटरफ़ेस परिभाषित करता हूं, और एक फैक्ट्री क्लास जो उस इंटरफ़ेस का उदाहरण बनाता है, तो क्या कोई तरीका है कि मैं क्लाइंट कोड को केवल इंटरफ़ेस का उपयोग करने के लिए मजबूर कर सकता हूं, न कि अंतर्निहित कंक्रीट क्लास? मेरी समझ से, ग्राहक वास्तव में अंतर्निहित कक्षा में किसी भी सार्वजनिक कार्य/फ़ील्ड का उपयोग करने में सक्षम हैं।PHP में इंटरफेस का उद्देश्य क्या है?
<?php
interface IMyInterface
{
public function doSomething();
}
?>
<?php
class ConcreteImplOfMyInterface implements IMyInterface
{
const NotPartOfInterface = 'youcantseeme';
public function doSomething()
{
}
}
?>
<?php
class MyInterfaceFactory
{
public static function createMyInterface()
{
return new ConcreteImplOfMyInterface();
}
}
?>
<?php
function client()
{
$myInterface = MyInterfaceFactory::createMyInterface();
return $myInterface::NotPartOfInterface;
}
?>
अच्छी सामग्री के लिए +1 – alex
मैं ओओपी एक्सेस संशोधक समझता हूं और मुझे पता है कि PHP में टाइपिंग संकेत है। तथ्य यह है कि फ़ंक्शन रिटर्न प्रकारों पर टाइप संकेत नहीं है, हालांकि इंटरफ़ेस मेरे लिए व्यर्थ प्रकार की तरह दिखता है। क्या होगा यदि मैं एक ही लॉजिकल घटक में कक्षाओं को एक-दूसरे पर सार्वजनिक तरीकों को कॉल करने में सक्षम होना चाहता हूं, लेकिन मैं उस घटक को सार्वजनिक इंटरफेस का पर्दाफाश करने के लिए पूरी तरह से चाहता था जो कि उस घटक के साथ संवाद करने का एकमात्र तरीका था? यह PHP में संभव प्रतीत नहीं होता है। – jameswelle
एक दिलचस्प बात यह है कि आप वर्तमान वर्ग के उदाहरणों की संरक्षित और यहां तक कि निजी विधि/चर तक पहुंच सकते हैं। उदाहरण के लिए, यदि उपयोगकर्ता श्रेणी में निजी संपत्ति $ टोकन है तो आपके पास उपयोगकर्ता वर्ग के अंदर एक विधि हो सकती है: सार्वजनिक फ़ंक्शन चेंज टोकन (उपयोगकर्ता $ उपयोगकर्ता) {$ उपयोगकर्ता-> टोकन = '1234'; } – Joe