2013-05-13 14 views
5

PHP तब तक निजी विधियों को कॉल करने देगा जब तक वे एक ही कक्षा के उदाहरणों से आते हैं।PHP अन्य तरीकों से निजी तरीकों को कॉल करने की अनुमति क्यों देता है?

यह कैसे the PHP docs यह बताते है: भले ही वे एक ही उदाहरणों नहीं हैं

एक ही प्रकार के वस्तुओं एक दूसरे के निजी और संरक्षित सदस्यों के लिए उपयोग होगा। ऐसा इसलिए है क्योंकि कार्यान्वयन विशिष्ट विवरण पहले से ही उन वस्तुओं के अंदर ज्ञात हैं।

क्या यह ब्रेक encapsulation नहीं है? यह तथ्य कैसे है कि implementation specific details are known इसे न्यायसंगत है?

पेज। क्या अन्य (वस्तु उन्मुख) भाषाएं हैं जो ऐसा करती हैं?

+0

मेरी राय में यह ओओपी नियम तोड़ता है, हालांकि, क्या यह आपका प्रश्न है? – Voitcus

उत्तर

1

यह अधिकांश भाषाओं के लिए सच है, java में आप इसे भी कर सकते हैं, इसका कारण यह है वस्तु एक ही उदाहरण से है, यह "जानता" सभी गुण एक ही उदाहरणों

1

के लिए एक जवाब के रूप में पोस्ट स्क्रिप्टम, डेल्फी (तथाकथित "ऑब्जेक्ट पास्कल") और लाजर ("फ्री पास्कल") दोनों निजी गुणों तक पहुंच को केवल उसी यूनिट में एक्सेस करने की अनुमति देते हैं, जिसे क्लास कार्यान्वयन कोड किया गया है। तो आप एक इकाई के अंदर दो अलग-अलग कक्षाएं डाल सकते हैं और उनके पास एक दूसरे के निजी गुणों तक पहुंच है।

यदि अलग-अलग इकाइयों में दो कक्षाएं रखी जाती हैं तो यह अनुमति नहीं है (मान लीजिए कि यह PHP में नेमस्पेस जैसा है)।

1

एक जवाब के रूप में करने के लिए "नहीं इस तोड़ कैप्सूलीकरण करता है?":

हालांकि Encapsulation principle in OOP परिभाषा थोड़ा अस्पष्ट है। जिस तरह से मैं इसे समझता हूं वह एक वर्ग की सीमाओं में निजी डेटा और तर्क रखता है।

अनैच्छिक दलों को सीधे पहुंचने से रोकने के लिए, एक वर्ग के अंदर संरचित डेटा ऑब्जेक्ट के मूल्यों या स्थिति को छिपाने के लिए Encapsulation का उपयोग किया जाता है।

मैं अगर पीएचपी, जावा और अन्य भाषाओं में कक्षाओं के इस व्यवहार अच्छा है या बुरा है पता नहीं है, लेकिन मुझे नहीं लगता यह कक्षाएं की Encapsulation टूट जाता है।

+0

निश्चित रूप से। कक्षा के सदस्यों के लिए, 'यह कक्षा के सीमाओं में निजी डेटा और तर्क रखता है'। उदाहरण के लिए, हालांकि, यह मामला नहीं होना चाहिए। –

+1

@EmanuilRusev http://stackoverflow.com/a/4244833/679227 –

संबंधित मुद्दे