क्या मुझे कंस्ट्रक्टर से अपवाद फेंकना चाहिए?


46

मुझे पता है कि मैं PHP में कंस्ट्रक्टर से अपवाद फेंक सकता हूं लेकिन क्या मुझे ऐसा करना चाहिए? उदाहरण के लिए, यदि किसी पैरामीटर्स का मूल्य वैसा नहीं है जैसा कि मैंने इसकी अपेक्षा की थी।

या क्या मुझे एक विधि लागू होने तक एक अपवाद को फेंकना चाहिए। दोनों मामलों में फायदे और नुकसान क्या हैं?


सवाल यह है कि क्या आप चाहते हैं कि आपके उपयोगकर्ता बदसूरत अपवाद त्रुटि संदेश देखें?

15
@LawrenceCherone नहीं, यह सवाल नहीं है। हर्गिज नहीं। सवाल यह है कि क्या कोई अपवाद तुरंत उठाया जाता है, जब ctor ऑब्जेक्ट को उस से पारित किए गए तर्कों से एक वैध स्थिति में सेट नहीं कर सकता है या तब तक स्थगित कर सकता है जब तक कि संभव अमान्य स्थिति वाले उस उदाहरण पर काम करने वाली विधि को नहीं कहा जाता है। हालांकि प्रोग्रामर के लिए बेहतर अनुकूल है।

4
@LawrenceCherone तुम सही हो। कोई भी सॉफ़्टवेयर कभी भी जानबूझकर कभी भी विफल नहीं होना चाहिए; इसे बस जारी रखना चाहिए और देखना चाहिए कि क्या होता है। / s
user253751

@ मिनीबिस अच्छा व्यंग्य अच्छा है।
kodeart

यह एक भयानक सवाल है !!! मैंने आज तक इस विचार पर कभी विचार भी नहीं किया।
राइज जॉन्स

जवाबों:


75

आप अपवाद को क्यों स्थगित करेंगे?

यदि आप जानते हैं कि ऑब्जेक्ट दिए गए मापदंडों के साथ ठीक से इंस्टैंट नहीं कर सकता है, तो आपको निश्चित रूप से एक अपवाद फेंकना चाहिए।

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

बहुत सी चीजें हैं जो उस पर एक विधि को बुलाए बिना आपकी वस्तु पर की जा सकती हैं: इसे एक सूची में जोड़ा जा सकता है, इसकी तुलना की जा सकती है, इसे एक पैरामीटर के रूप में भेजा जा सकता है, आदि आदि। ये सभी चीजें हैं ऐसा नहीं होना चाहिए, यह देखते हुए कि यह एक वैध वस्तु नहीं है।


21

यदि आपका कंस्ट्रक्टर खराब पैरामीटर (एस) से भरा हुआ है, तो आपको एक अपवाद फेंकना चाहिए (चाहिए?)। यदि आप नहीं करते हैं, तो आप एक बुरी वस्तु प्राप्त कर सकते हैं जो अपेक्षा के अनुरूप व्यवहार नहीं करेगा।


17

पूर्ण रूप से!!

आपको अपवाद को फेंकना चाहिए यदि वस्तु के निर्माण के लिए पैरामीटर वैध नहीं है या अनुबंध के अनुसार नहीं है। प्रवाह को आगे बढ़ाने के लिए यह जानना एक अच्छा विचार नहीं है कि वस्तु का निर्माण खराब डेटा के साथ किया जाता है जो कई मुद्दों का कारण बन सकता है यदि आप कॉलर को आगे जाने की अनुमति देते हैं।

यह हमेशा "विफल रहता है और विफल रहता है " बेहतर है


7

मुझे पता है कि मैं PHP में कंस्ट्रक्टर से अपवाद फेंक सकता हूं लेकिन क्या मुझे ऐसा करना चाहिए?

यह सूचित करने का एकमात्र एकमात्र तरीका है कि ऑब्जेक्ट निर्माण विफल हो गया।


2

आप अपनी वस्तु को त्वरित करने से पहले निर्धारित पैरामीटर को मान्य क्यों नहीं करेंगे? ऐसा करने से यह सुनिश्चित होगा कि आपकी वस्तु बनाई जाएगी, इस प्रकार, किसी भी पक्ष को हटाने से इसकी विफलता से हो सकती है।

हालांकि मुझे पता है कि आप अपने कंस्ट्रक्टर में चीजों की जांच कर सकते हैं और अपवादों को टॉस कर सकते हैं, मैं अपने कंस्ट्रक्टरों को इस तरह से लिखना पसंद करता हूं कि वे विफल न हों। मैं ऑब्जेक्ट को तुरंत करने से पहले पैरामीटर सत्यापन करता हूं, जिसे मैं तब कर सकता हूं जब मेरे कंस्ट्रक्टर विफल होने के बिना अपवाद टॉस कर सकते हैं। मैं आम तौर पर अपने कंस्ट्रक्टरों में नई वस्तुओं को तुरंत भेजने की कोशिश नहीं करता, बजाय उन्हें जरूरत के उन्हें चुनने के लिए।

एकदम मेरे विचार। PHP बहुत स्वतंत्रता प्रदान करता है - आनंद लें!


मुझे यकीन नहीं है कि यह उत्तर क्यों अस्वीकृत है। यह ऑब्जेक्ट निर्माण ( एक "गार्ड" विधि ) से पहले पैरामीटर सत्यापन का उपयोग करके एक वैध दृष्टिकोण प्रदान करता है जो विशिष्ट (आमतौर पर व्यापार) नियमों के लिए आपकी कक्षाओं / कार्यों को डिजाइन करने का एक अच्छा तरीका है। अगर यह भी सीधे ओपी के सवाल का जवाब नहीं है, लेकिन यह अभी भी एक अच्छी सलाह है :)
kodeart
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.