2012-06-06 16 views
13

लोग मुझे बताते रहते हैं कि मुझे अपने सभी वर्ग गुणों और विधियों के सामने सार्वजनिक, निजी, या संरक्षित एक्सेस संशोधक का उपयोग करना चाहिए। मैं वास्तव में समझ में नहीं आता क्यों। मैं नया हूँ तो मेरे साथ सहन, लेकिन जिस तरह से मैं इसे देखना यह है:सार्वजनिक निजी इतनी महत्वपूर्ण क्यों सुरक्षित है?

  • मैं केवल एक है जो अपने कोड पर काम करेंगे। एक टीम नहीं

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

स्पष्टीकरण मैं से एक यह "की रक्षा करता है या छुपाता है" जो लोग यह देख सकते हैं से अपने कोड है कि है ..... लेकिन PHP में कोई रास्ता नहीं है कि मैं एक उपयोगकर्ता को देखने के लिए के बारे में पता नहीं है अपने कोड पहले स्थान पर है, मैं इसे किससे छुपा रहा हूं? अगर वे मेरे कोड देख सकते हैं तो वे या तो एक हैकर हैं या वे मेरे खाते में हैं इसलिए मैं उन्हें रोक नहीं सकता।

मैं समझ सकता हूं कि क्या मैं एक टीम पर विशाल कोड के साथ काम कर रहा था, लेकिन छोटी चीजों के लिए यह अनावश्यक लगता है।

+0

शायद "PHP" टैग ड्रॉप करना चाहिए, क्योंकि प्रश्न कम या कम भाषा-अज्ञेयवादी है। – DevSolar

उत्तर

23

आप किसी से भी अपना कोड छुपा नहीं रहे हैं, यह बकवास है।

protected और private गुण PHP बताते हैं कि आप उन्हें का उपयोग कैसे करना चाहते हैं। जब आप कक्षा बनाते हैं, तो आपको आमतौर पर यह पता होना चाहिए कि आप उस कक्षा का उपयोग कैसे करना चाहते हैं। आपके पास public भाग होंगे, जो अन्य कोड के साथ बातचीत कर सकते हैं, और अन्य भागों जिन्हें आप सीधे अन्य कोड एक्सेस नहीं करना चाहते हैं। आम तौर पर आप कक्षा के public को अच्छी तरह परिभाषित विधियों के बहुत छोटे सेट पर सीमित करना चाहते हैं जो बदलने जा रहे हैं। क्योंकि एक बार जब आप उन्हें अपने कोड के अन्य हिस्सों में उपयोग कर रहे हैं, तो उन्हें बदलना दर्द हो जाता है। सभी private और protected सामान केवल कक्षा के भीतर ही पहुंचा जाना चाहिए, इसलिए इसे बदलना बाद में किसी समस्या से कम है।

यदि आप कोड पर काम कर रहे एकमात्र व्यक्ति हैं तो आप कह सकते हैं कि यह "निजी भागों" का उपयोग न करने जितना आसान है। लेकिन आप गलतियां करने जा रहे हैं, और आप भूल जाएंगे कि समय के साथ कौन सा हिस्सा संबंधित है। इन गुणों को स्पष्ट रूप से protected या private के रूप में चिह्नित करने से PHP आपको अपनी "उपयोग की शर्तों" का उल्लंघन करने में सहायता नहीं करता है। के मानसिक नोट के बीच यह अंतर है "इसे स्पर्श न करें" और वास्तव में किसी चीज़ पर लॉक डालना।

+1

सिडेनोट: किसी क्लाइंट के परिप्रेक्ष्य से किसी वर्ग को देखते समय (यानी, कोड * उस वर्ग का उपयोग करके), आप जानते हैं कि 'सार्वजनिक' हिस्सा आपके लिए महत्वपूर्ण है। – DevSolar

5

"Encapsulation", जैसा कि इसे कहा जाता है, लोगों से आपके कोड की रक्षा नहीं करता है। कोई भी जिसके पास आपके स्रोत कोड तक पहुंच है, वह जानता है कि वहां क्या है। और यदि उनके पास स्रोत नहीं है, तो वे आपकी सार्वजनिक सामग्री के साथ कुछ भी विशेष नहीं कर सकते हैं।

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

नोट, इसके लिए उपयोगी होने के लिए, आपके पास public function setX($x) { $this->x = $x; } जैसी सभी चीज़ों के लिए केवल छोटे सेटर्स नहीं हो सकते हैं - जो पूरे उद्देश्य को हराते हैं। आपकी ऑब्जेक्ट जितनी अधिक हो सके उतनी "ब्लैक बॉक्स" होनी चाहिए, और इसका आंशिक अर्थ यह है कि बाहरी कोड को जितना संभव हो सके आंतरिक स्थिति को देखने और संशोधित करने में सक्षम होना चाहिए। कक्षा को अपने राज्य का प्रबंधन करने दें, और ऐसे तरीके हैं जो उन्हें अपनी नौकरी करने के लिए आवश्यक अन्य सामान लेते हैं। (यहां एक अर्ध-स्पष्ट अपवाद होगा जिसका मुख्य उद्देश्य डेटा को नौकायन करना है, लेकिन यहां तक ​​कि आपको उस डेटा तक पहुंच सीमित करना चाहिए, जो डेटा नहीं है, और ऐसे डेटा के लिए सेटर्स आदर्श रूप से इसे मान्य करेंगे।)

5

मुझे पता चला है कि ऑपरेटर आपको अपने पैर पर कदम उठाने में मदद नहीं करते हैं। जैसे-जैसे मेरे आवेदन बड़े हो गए हैं, मैंने कभी-कभी कुछ मूल वर्गों को बनाने और मेरे बचाव के लिए एक्सेस संशोधक होने में मेरी मूल विचारों को नजरअंदाज कर दिया है। यह आपके कोड को को बेहतर ढंग से व्यवस्थित करने में भी मदद करता है ताकि आप समझ सकें कि प्रोग्रामिंग स्पेगेटी कोड क्या है और क्या खत्म नहीं होता है। इसके अलावा, किसी भी स्थिति में किसी और के लिए प्रोग्रामिंग समाप्त करने की संभावना है, जहां कोई व्यक्ति आपके कोड को लाइन के नीचे देख सकता है, तो आप अपनी कोडिंग शैली द्वारा शर्मिंदा नहीं होंगे क्योंकि संरचनाओं का उपयोग करने के लिए उपयोग किया जा रहा है आपके कोड को व्यवस्थित करने की भाषा आपको आपकी कोडिंग शैली में सुधार करने में मदद करेगी। संरचनाएं हैं, तो उनका उपयोग क्यों नहीं करें?

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

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

2

मुख्य बात यह आवश्यक है कि कोड encapsulation और स्थिरता के लिए है, इसलिए आपके ठंड के पास आपके कोड के आसपास लगातार इंटरफ़ेस है।

जब आप अपनी कक्षाएं बना रहे हैं, तो आप संकेत दे रहे हैं कि आप कौन से हिस्सों को सार्वजनिक-निजी संरक्षित करना चाहते हैं, आप आगे भी सोच रहे हैं और अपने आवेदन को आर्किटेक्चर कर रहे हैं कि डेटा को अन्य वर्गों के साथ कैसे सहभागिता करनी चाहिए, और यह भी अच्छी बात है छोटी परियोजना के लिए उपयोग करने के लिए।

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

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