Magento में अपवादों को फेंकने का पसंदीदा तरीका क्या है?


45

मैगेंटो कोर में निम्नलिखित सभी विधियों का उपयोग किया जाता है ताकि एक पसंदीदा (या नवीनतम "सर्वश्रेष्ठ अभ्यास") तरीका हो?

  • Mage::throwException('Some Message')- 732 Usages
  • throw new Exception('Some Message')- 419 Usages
  • throw Mage::exception('Vendor_Module', 'Some Message')- 94 उपयोग
    (एक Vendor_Module_Exceptionवर्ग बनाने की आवश्यकता )

2
आपको निष्पादन की गिनती कैसे मिली? मैं इसे जानने की उत्सुकता के लिए पूछ रहा हूँ !!!
राजीव के टॉमी

1
@RajeevKTomy मैं कमांड लाइन से एक grep का अनुमान लगा रहा हूं - कुछ ऐसा grep -r throwException /path/to/magento/app/code/core | wc -l ; grep -r throw\ new /path/to/magento/app/code/core | wc -l ; grep -r throw\ Mage /path/to/magento/app/code/core | wc -l- हालांकि इसके लिए जरूरी है कि आपको पता हो कि आपको भी क्या देखना है।
डग मैकलीन

जवाबों:


36

कॉल Mage::throwExceptionका उपयोग विशिष्ट Mage_Core_Exceptionविविधता के अपवादों को फेंकने के लिए किया जाता है । ये आम तौर पर अंतिम उपयोगकर्ता के लिए त्रुटि संदेश प्रस्तुत करने के लिए उपयोग किए जाते हैं। इसके उदाहरणों के लिए Mage::throwException, Mage_Checkout मॉड्यूल में एक त्वरित खोज करें , आपको कई उदाहरण मिलेंगे जहां त्रुटि संदेश वास्तव में फेंकने से पहले अनुवादित किया जा रहा है, क्योंकि यह अंततः सत्र ऑब्जेक्ट में जोड़ा जा रहा है और उपयोगकर्ता को प्रदर्शित किया जाएगा। परिणामी पृष्ठ।

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

मैंने कभी व्यक्तिगत रूप से उपयोग नहीं किया है, Mage::exceptionलेकिन यह प्रत्येक मॉड्यूल के लिए एक अद्वितीय अपवाद प्रकार वाले पैटर्न का प्रयास प्रतीत होता है। इसका उपयोग करने में कोई नुकसान नहीं होगा, क्योंकि यह अनिवार्य रूप से एक कारखाना है जो दिए गए मॉड्यूल के लिए एक अपवाद उदाहरण देता है, हालांकि (इस लेखन के समय) यह ओवरराइड्स जैसी चीजों के लिए किसी भी समर्थन को लागू नहीं करता है।


मुझे यहां आपका तर्क पसंद है - यह सादे अंग्रेजी में है :)
दार्इंलिंक

मैंने Mage::throwException('my error message')अपने हेल्पर क्लास में कॉल किया लेकिन कुछ नहीं हुआ ??
ब्लैक

16

आपने कठिन भाग किया है, यह पता लगाने के लिए कि वे कितनी बार उपयोग किए जाते हैं :)

tl; dr: IMHO, आपको Mage::throwExceptionसबसे अधिक बार उपयोग करना चाहिए , Mage::exceptionजब आप अपने मॉड्यूल के दायरे के बाहर से अपवाद के प्रकार को बढ़ाने की आवश्यकता होती है, यदि सत्र मैसेजिंग क्षमता और इस तथ्य के अलावा कोई अन्य कारण नहीं है कि आप नहीं करते हैं इसके throw newसामने टाइप करना है।

यहाँ ब्रेकडाउन है:

  • Mage::throwExceptionअनिवार्य रूप से करने के लिए एक आवरण है Mage_Core_Exception($message)एक के माध्यम से एक सत्र के लिए अपवाद जोड़ने के लिए सक्षम होने के अतिरिक्त कार्यशीलता के साथ getSingletonकॉल के साथ श्रृंखलितaddMessage
  • new Exception()एक अपवाद को फेंकने के लिए कोर PHP तरीका है, लेकिन आपको throwकीवर्ड का उपयोग करने की आवश्यकता होती है और संभवत: थोड़ा और अधिक "प्रदर्शन" होता है क्योंकि अन्य दो अतिरिक्त कार्यक्षमता वाले रैपर हैं।
  • जैसा कि उल्लेख किया गया है, Mage::exceptionएक रैपर भी है, लेकिन आपको अपने स्वयं के अपवाद वर्ग को तत्काल अनुमति देने का लाभ है। यह वास्तव में उपयोगी है यदि आप एक प्लगइन डेवलपर हैं और अपवादों के लिए कस्टम लॉग बनाने की आवश्यकता है, अलग-अलग, कार्यक्षमता logExceptionप्रदान किए बिना (जैसे, कोई स्टैक trac) या अपवाद पर API कॉल करना चाहते हैं, आदि। आप throwएक भिन्न प्रकार के वर्ग को छोड़ना चाहते हैं , उदाहरण के लिए, क्या होता है Mage_Paypal, अक्सर एक Mage_Coreअपवाद प्रकार को बढ़ाकर ।

टाइमिंग के बारे में बात करें ... 10 सेकंड से भी कम। :)
davidalger

के बीच वरीयता का तर्क new Exception()और Mage::exception()मेरे लिए बिल्कुल भी स्पष्ट नहीं है। जब मैं Mage::exception()कोड में देखता हूं , तो मुझे कोई लाभ नहीं दिखता है throw $exception, यह वास्तव में आपके द्वारा (आपके / a) एक्सटेंशन के लिए मानक ऑटो-लोडिंग कॉन्फ़िगर किए गए अपवाद वर्ग को चुनने में बाधा उत्पन्न करता है क्योंकि यह क्लासनेम को उपसर्ग करता है, स्थैतिक विश्लेषण में बाधा डालता है और आपको इसके अपवाद पर अतिरिक्त तरीकों को कॉल करने की अनुमति नहीं देता है, यह सीधे फेंकता है।
हकर्रे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.