php - जनक - निजी तरीके या संरक्षित तरीकों का उपयोग करने के लिए सबसे अच्छा?




मार्शल कला संस्थान patna bihar (7)

खैर, निजी खोजशब्द एक उद्देश्य से किया गया था। यदि आप चर को अपने विरासत कक्षाओं को अपनाना नहीं चाहते हैं (या आप चाहते हैं कि लोगों को विरासत में मिली कक्षाओं में नहीं खेलना) तो आप उन्हें सुरक्षित क्यों बनाते हैं?

लोगों को अपने निजी भागों को छूने न दें :)

मेरे बहुत सारे PHP परियोजनाओं में, मैं उन वर्गों के साथ समाप्त होता है जिनके पास गैर-सार्वजनिक कार्य हैं जो मुझे विस्तारित करने का इरादा नहीं है।

क्या इन्हें संरक्षित, या निजी घोषित करना सबसे अच्छा है?

मैं बहस को दोनों तरीकों से देख सकता हूं - उन्हें निजी बनाना एक बहुत अधिक रूढ़िवादी दृष्टिकोण है, लेकिन यह तर्क दिया जा सकता है कि बाद में अगर मैं विधि को विस्तारित करना चाहता हूं और इसे स्पष्ट करता है कि आधार वर्गों द्वारा कौन से तरीकों को बढ़ाया जाता है।

दूसरी तरफ, किसी भी तरह से असामाजिक निजी का उपयोग कर रहा है, इसमें किसी सैद्धांतिक भविष्य के डेवलपर को अपने कोड को बिना किसी संशोधन के विस्तार से बाधित किया जा सकता है?


निजी रूप से, मुझे लगता है कि जितना संभव हो सके उतना निजी बनाने के लिए मुझे उचित लगता है। मैं सिर्फ प्रत्येक पद्धति को देखता हूं और खुद से पूछता हूं कि अगर मैं एक व्युत्पन्न वर्ग चाहता हूं तो उसे कॉल करने में सक्षम होना चाहिए। सब कुछ संरक्षित पत्तियों को गलत तरीके से बुलाया तरीके होने के लिए दरवाजा खोलने का निर्माण करना।

मुझे लगता है कि यह प्रश्नों के नीचे आता है "जब तक कि विशेष रूप से अनुमति नहीं दी जाती है"

एक अतिरिक्त कारक यह है कि भावी रिलीज में सुरक्षित तरीके से संरक्षित निजी विधि बनाना आसान है। किसी विधि को निजीकरण करने में एक बार संरक्षित होने के बाद यह लगभग असंभव है, जैसा कि आप कभी भी नहीं जानते हैं कि आप जो अन्य कोड अवैध हैं


मेरी प्रेरणा उन्हें निजी रखने के लिए है, जब तक आप उन्हें अन्यथा होना चाहिए

यह तर्क दिया गया है (दुख की बात है कि मैंने इस लिंक को गलत स्थान दिया है) कि निजी तरीकों को बनाने में असामाजिक है, उतना ही तरह से उन्हें 'अंतिम' बनाने के रूप में, यह काफी तानाशाह है कि लोग आपके कोड का उपयोग कैसे कर सकते हैं।

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


मैं विधियों को निजी के रूप में घोषित करूँगा यह स्पष्ट रूप से इंगित करता है कि वे सार्वजनिक एपीआई का हिस्सा नहीं हैं।

भविष्य में क्या हो सकता है, इसके बारे में चिंता न करें।


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

यह पहले से बहुत ही अस्पष्ट लगता है क्योंकि ज्यादातर समय के मामलों को विरासत में लेना चाहिए, लेकिन दुर्लभ मामलों में जब उन्हें विरासत में नहीं लिया जाना चाहिए क्योंकि वे उस प्रकार के लिए अद्वितीय हैं


मैं आम तौर पर private से बचने मेरा तर्क यह है कि यदि आपके पास दो वर्गों के बीच एक विरासत का संबंध है, और निजी सदस्य हैं, तो यह एक बहुत ही मजबूत संकेत है कि निजी भागों को एक अलग वस्तु में फेंक देना चाहिए।


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

final public function init():void
{
    if(!_initialized)
    {
        _init();
        _initialized = true;
    }

}

protected function _init():void
{
    // specific code.
}

अधिकांश अन्य मामलों में तरीकों और चर को कम से कम पठन समारोह के रूप में विरासत के लिए उपयोगी होना चाहिए। क्योंकि ज्यादातर समय जब मैं किसी और के द्वारा बनाई गई कोड का उपयोग करता हूं, और जब यह कोड निजी चीजों को हमेशा से और कई परेशानियों के साथ उपयोग करता है:

  • वांछित व्यवहार पहले से लागू नहीं है या पूरा नहीं है
  • मैं एक विधि का उपयोग नहीं कर सकता क्योंकि यह निजी है
  • मैं इस विधि को नहीं बदल सकता क्योंकि यह निजी है
  • अगर यह संरक्षित है (या यदि मैं इसे संरक्षित रूप में बदलता हूं) तो मैं कोड को फिर से काम नहीं कर सकता (उर्फ अन्य लोगों के निर्देशों के बीच में व्यवहार जोड़ना, क्योंकि इस कोड का भाग निजी विधियों या वेरिएबल्स का उपयोग करता है ...

    = अंत में आप वर्ग के विस्तार की क्षमता प्राप्त करने के लिए संरक्षित करने के लिए लगभग सभी एक्सेसर को बदल देते हैं!

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

यदि आपको लगता है कि इस वर्ग को किसी भी मामले में विस्तारित नहीं किया जाना चाहिए: निजी उपयोग करें





oop