2012-04-20 20 views
7

परिवर्तनीय encapsulation, सेट/प्राप्त विधियां सर्वोत्तम प्रथाएं हैं, लेकिन हमारे पास एक परिवर्तनीय सार्वजनिक घोषित करने का मौका क्यों है यदि इसका उपयोग किसी भी तरह से नहीं किया जा रहा है? क्या यह बेहतर होगा अगर डिफ़ॉल्ट रूप से चर हमेशा निजी होते हैं, उन्हें सार्वजनिक बनाने का कोई मौका नहीं है क्योंकि मैंने पढ़े गए सभी ट्यूटोरियल का कहना है कि उन्हें सेट/प्राप्त विधियों के साथ encapsulated किया जाना चाहिए? क्या कम से कम PHP ओओपी में सार्वजनिक चर के लिए कोई वैध उपयोग केस है?क्या PHP ओओपी में सार्वजनिक चर का उपयोग करने के लिए कोई वैध उपयोग केस है?

+0

कक्षाओं (जैसे विरासत/ओवरराइटिंग) में संरक्षित चर के लिए उपयोग के मामले हैं, लेकिन मैं किसी के लिए सार्वजनिक लोगों के बारे में नहीं जानता।जो कक्षाओं में PHP 4 var $ var घोषणा के कारण हो सकता है जिसे PHP 5 में सार्वजनिक रूप से व्याख्या किया जाता है। – Hajo

+2

सरल उत्तर: क्योंकि ** ** (चाहने वाले) के लिए गेटर्स और सेटर्स का उपयोग करने के लिए कई पूर्ण मान्य कारण हैं, इसलिए आप बस सार्वजनिक चर का उपयोग कर सकते हैं। गतिशील ओप के अधिकांश मामलों में – CodeCaster

+0

@ कोडकस्टर जो मुझे लगता है कि खराब डिजाइन दिखाता है। – Hajo

उत्तर

8

असल में यह सिर्फ दूसरी तरफ है: सैद्धांतिक रूप से गेटर्स/सेटर्स गलत हैं। गुण किसी ऑब्जेक्ट की स्थिति को परिभाषित करते हैं, जहां विधियां व्यवहार को परिभाषित करती हैं। गेटर्स/सेटर्स केवल गुणों को पढ़ने और लिखने के लिए अवरुद्ध करते हैं, लेकिन वे अर्थपूर्ण अर्थ को पूरी तरह से तोड़ते हैं: अब ऑब्जेक्ट की स्थिति पढ़ना ऑब्जेक्ट का व्यवहार है।

गुण गुण की तरह लग रहे करने के लिए बनाने के लिए फिर से वहाँ सड़क :) https://wiki.php.net/rfc/propertygetsetsyntax

1

सेट पर एक आरएफसी है/तरीकों जाओ सर्वोत्तम प्रथाओं हैं, लेकिन यह है कि अगर हम क्यों एक चर सार्वजनिक घोषणा करने के लिए एक मौका है वैसे भी इस्तेमाल नहीं किया जाना चाहिए?

सर्वोत्तम प्रथाओं का उपयोग नहीं किया जाना चाहिए और ऐसा नहीं है। एक भाषा को विभिन्न उपयोग-मामलों के लिए विभिन्न औजारों की पेशकश करने की आवश्यकता होती है और यह सुसंगत होना चाहिए।

PHP ऑब्जेक्ट्स हमेशा सार्वजनिक सदस्यों का समर्थन करते हैं और जब अलग-अलग संगतताएं पेश की जाती हैं, पिछली संगत कारणों से सार्वजनिक सदस्य बहुत उपयोगी होते हैं।

क्या बेहतर होगा यदि डिफ़ॉल्ट रूप से चर हमेशा निजी होते हैं, तो उन्हें सार्वजनिक बनाने का कोई मौका नहीं है क्योंकि मैंने पढ़े गए सभी ट्यूटोरियल का कहना है कि उन्हें सेट/प्राप्त विधियों के साथ encapsulated किया जाना चाहिए?

उस प्रश्न का विशेष रूप से उत्तर नहीं दिया जा सकता है, यह बहुत ही व्यक्तिपरक है और कई अलग-अलग उपयोग-मामले हैं जिनके परिणामस्वरूप एक अलग उत्तर होंगे।

क्या कम से कम PHP ओओपी में सार्वजनिक चर के लिए कोई वैध उपयोग केस है?

पिछड़ा संगतता के साथ शुरू करें। यदि आप अपने कोड को दोबारा नहीं कर सकते हैं, लेकिन इसे हर समय पूरी तरह से लिखना होगा, यह बहुत महंगा होगा।

-1

चलो देखते हैं .. यह CakePHP EmailComponent से वास्तविक दुनिया ईमेल एपीआई कक्षा है। इस वर्ग आप केवल करने की आवश्यकता है उपयोग करने के लिए "सेट" कुछ संपत्ति तो बस send()

$this->Email->to = '[email protected]'; 
$this->Email->from = '[email protected]'; 
$this->Email->title = 'xxx'; 
$this->Email->msg = 'blabla..'; 
$this->Email->send(); 

वास्तव में निजी संपत्तियों और समारोह इस वर्ग के अंदर का एक बहुत है, लेकिन यह निजी है।

कक्षा में कुछ करने की ज़िम्मेदारी है (एकल)। Encapsulation केवल उस चीज़ को प्रकाशित करना है जो लोग उस चीज़ को करने के लिए उपयोग करते हैं और तकनीकी/आधारभूत संरचना को निजी के अंदर रखते हैं।

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