Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. PHP
Code

PHP एक्सेप्शन: एरर हैंडलिंग के लिए Try Catch

by
Difficulty:BeginnerLength:MediumLanguages:

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

इस पोस्ट में, आप सीखेंगे कि PHP में एक्सेप्शन हैंडलिंग का उपयोग कैसे करें। PHP 5 के रूप में, हम एरर हैंडलिंग के लिए try catch ब्लॉक का उपयोग कर सकते हैं-यह एक्सेप्शन को संभालने और आपके एप्लिकेशन के फ्लो को नियंत्रित करने का एक बेहतर तरीका है। इस लेख में, हम कुछ असली दुनिया के उदाहरणों के साथ एक्सेप्शन हैंडलिंग की बेसिक बातें करेंगे।

एक्सेप्शन क्या है?

PHP 5 ने एक नया एरर मॉडल पेश किया जो आपको अपने एप्लिकेशन में एक्सेप्शन थ्रो और कैच करने की अनुमति देता है-यह PHP के पुराने वर्जन के मुकाबले हमारे पास एरर को संभालने का एक बेहतर तरीका है। सभी एक्सेप्शन बेस क्लास Exception के इंस्टैंस हैं, जिन्हें हम अपने स्वयं के कस्टम एक्सेप्शन को पेश करने के लिए एक्सटेंड कर सकते हैं।

यह ध्यान रखना महत्वपूर्ण है कि एक्सेप्शन हैंडलिंग एरर हैंडलिंग से अलग है। एरर हैंडलिंग में, हम set_error_handler फ़ंक्शन का उपयोग हमारे कस्टम एरर हैंडलिंग फ़ंक्शन को सेट करने के लिए कर सकते हैं ताकि जब भी कोई एरर ट्रिगर हो, तो यह हमारे कस्टम एरर हैंडलिंग फ़ंक्शन को कॉल कर सके। इस तरह, आप एरर को नियंत्रित कर सकते हैं। आम तौर पर, हालांकि, कुछ प्रकार के एरर रिकवर नहीं होते हैं और प्रोग्राम एक्सेक्यूशन को रोकती हैं।

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

एक्सेप्शन हैंडलिंग कंट्रोल फ्लो

आइए निम्नलिखित डायग्राम को देखें जो जेनेरिक एक्सेप्शन हैंडलिंग कंट्रोल फ्लो को दिखाता है।

Exception handling in a try catch finally block

PHP try और catch ब्लॉक का उपयोग करके एक्सेप्शन को थ्रो और कैच किया जा सकता है। कुछ ऐसा होने पर एक्सेप्शन थ्रो करने के लिए आप ज़िम्मेदार होते हैं, जिसकी अपेक्षा नहीं होती है। आइए जल्दी से निम्नलिखित सूडो कोड में दिखाए गए अनुसार, बेसिक एक्सेप्शन हैंडलिंग फ्लो से होकर गुजरें।

अधिकतर समय, जब आप एक्सेप्शन से निपट रहे होते हैं, तो आप उपरोक्त स्निपेट में दिखाए गए पैटर्न का उपयोग कर समाप्त कर देंगे। आप try और catch ब्लॉक के साथ finally ब्लॉक का भी उपयोग कर सकते हैं, लेकिन हम बाद में इस आर्टिकल में वापस आ जाएंगे।

try ब्लॉक वह है जहां आप संदेह करते हैं कि आपका कोड एक्सेप्शन जेनेरेट कर सकता है। try और catch का उपयोग करके आपको हमेशा ऐसे कोड को व्रैप करना चाहिए।

एक एक्सेप्शन थ्रो करना

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

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

एक बार catch ब्लॉक में एक्सेप्शन पकड़ा जाता है, Exception ऑब्जेक्ट जिसमे एक एरर मैसेज होता है throw कीवर्ड का उपयोग करके थ्रो कर दिया जाता है। उपरोक्त उदाहरण में $e वेरिएबल Exception क्लास का एक इंस्टैंस है, इसलिए इसमें उस क्लास के सभी मेथड्स तक एक्सेस है। इस ब्लॉक में, आपको अपने एक्सेप्शन हैंडलिंग लॉजिक को परिभाषित करना चाहिए-आप जो एरर पकड़ते हैं उसके साथ आप वास्तव में क्या करना चाहते हैं।

अगले सेक्शन में, हम समझने के लिए एक वास्तविक दुनिया के उदाहरण के माध्यम से देखेंगे कि एक्सेप्शन हैंडलिंग कैसे काम करता है।

एक असली दुनिया का उदाहरण

इस सेक्शन में, हम PHP में एक्सेप्शन हैंडलिंग का डेमोंस्ट्रेट करने के लिए एक वास्तविक दुनिया का उदाहरण तैयार करेंगे।

आइए मान लें कि आपने एक ऐसा एप्लिकेशन बनाया है जो config.php फ़ाइल से एप्लीकेशन कॉन्फ़िगरेशन लोड करता है। अब, यह आवश्यक है कि config.php फ़ाइल तब मौजूद हो जब आपका एप्लिकेशन बूटस्ट्रैप हो। इस प्रकार, config.php फ़ाइल मौजूद नहीं होने पर आपका एप्लिकेशन नहीं चलाया जा सकता है। तो यह एक एक्सेप्शन थ्रो करने के लिए एकदम सही उपयोग करने लायक केस है और यूजर को यह बताने के लिए कि उन्हें इस इशू को ठीक करने की आवश्यकता है।

जैसा कि आप उपर्युक्त उदाहरण में देख सकते हैं, हम बूटस्ट्रैपिंग स्टेप की शुरुआत में config.php फ़ाइल के अस्तित्व की जांच कर रहे हैं। अगर config.php फ़ाइल पाई जाती है, तो एक्सेप्शन सामान्य रूप से जारी रहता है। दूसरी ओर, अगर config.php फ़ाइल मौजूद नहीं है तो हम एक एक्सेप्शन थ्रो कर देंगे। इसके अलावा, अगर कोई एक्सेप्शन है तो हम एक्सेप्शन को रोकना चाहेंगे!

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

तो यह डिफ़ॉल्ट Exception क्लास का उपयोग कर एक्सेप्शन को हैंडल करने का एक उदाहरण था। अगले सेक्शन में, हम देखेंगे कि आप कोर Exception क्लास कैसे एक्सटेंड कर सकते हैं और अपने एप्लीकेशन में अपने स्वयं के कस्टम एक्सेप्शन बना सकते हैं।

कस्टम एक्सेप्शन कैसे बनाएं

इस सेक्शन में, हम चर्चा करेंगे कि आप अपने ऍप्लिकेशन्स में कस्टम एक्सेप्शन कैसे बना सकते हैं। असल में, हम उस उदाहरण का विस्तार करेंगे जिसे हमने पिछले एक्सेप्शन में कस्टम एक्सेप्शन का डेमोंस्ट्रेट करने के लिए अभी चर्चा की है।

पिछले उदाहरण में, हमने डिफ़ॉल्ट Exception क्लास का उपयोग कर कॉन्फ़िगरेशन एक्सेप्शन थ्रो किया। जब तक आप एक्सेप्शन एरर मैसेज से निपटना चाहते हैं तब तक यह बिल्कुल ठीक है। हालांकि, कभी-कभी आप एक्सेप्शन के प्रकार के आधार पर कुछ और करना चाहते हैं जिसे थ्रो किया जा रहा है। यही वह जगह है जहां कस्टम एक्सेप्शन उपयोगी हैं।

आइए पिछले उदाहरण को दोबारा देखें, जैसा कि निम्न स्निपेट में दिखाया गया है।

सबसे पहले, हमने ConfigFileNotFoundException क्लास को परिभाषित किया है, जो डिफ़ॉल्ट Exception क्लास को एक्सटेंड करता है। अब, यह हमारी कस्टम एक्सेप्शन क्लास बन जाती है, और जब हम अपने एप्लीकेशन में ConfigFileNotFoundException एक्सेप्शन थ्रो करना चाहते हैं तो हम इसका उपयोग कर सकते हैं।

इसके बाद, अगर config.php फ़ाइल मौजूद नहीं है, तो हमने ConfigFileNotFoundException एक्सेप्शन को थ्रो करने के लिए throw कीवर्ड का उपयोग किया है। हालांकि महत्वपूर्ण अंतर catch ब्लॉक में शामिल है। जैसा कि आप देख सकते हैं, हमने दो catch ब्लॉक को परिभाषित किया है, और प्रत्येक ब्लॉक का उपयोग विभिन्न प्रकार के एक्सेप्शन को पकड़ने के लिए किया जाता है।

सबसे पहले ConfigFileNotFoundException टाइप के एक्सेप्शन को पकड़ा जाता है। इसलिए, यदि एक एक्सेप्शन जिसे थ्रो किया जा रहा है, तो वह ConfigFileNotFoundException टाइप का है, यह ब्लॉक एक्सेक्यूट किया जाएगा। यदि एक्सेप्शन टाइप किसी विशेष catch ब्लॉक से मेल नहीं खाता है, तो यह अंतिम वाले से मैच करेगा, जो यहाँ सभी जेनेरिक एक्सेप्शन मैसेज को कैच करने के लिए है।

Finally ब्लॉक

इस सेक्शन में, हम प्रयास करेंगे कि finally कीवर्ड को try और catch ब्लॉक के साथ कैसे उपयोग कर सकते हैं। कभी-कभी, आप एक्सेप्शन थ्रो किये जाने के बावजूद कोड के एक टुकड़े को एक्सेक्यूट करना चाहते हैं। यही वह जगह है जहां आप finally ब्लॉक का उपयोग कर सकते हैं, क्योंकि फाइनली ब्लॉक में आपके द्वारा डाले गए कोड को हमेशा try और catch ब्लॉक के एक्सेक्यूशन के बाद एक्सेक्यूट किया जाएगा, चाहे कोई एक्सेप्शन थ्रो किया गया हो या नहीं।

आइए निम्नलिखित उदाहरण का उपयोग करके इसे समझने की कोशिश करें।

उपर्युक्त उदाहरण में कोड बिलकुल पहले की तरह है, केवल एक्सेप्शन यह है कि हमने catch ब्लॉक के बाद finally ब्लॉक जोड़ा है। और, जैसा कि हमने चर्चा की, इस ब्लॉक में कोड हमेशा एक्सेक्यूट किया जाएगा।

फाइनली ब्लॉक के लिए सामान्य उपयोग के मामले आमतौर पर रिसोर्स क्लीनअप से संबंधित होते हैं। उदाहरण के लिए, यदि आपने try ब्लॉक में डिस्क पर मौजूद फाइल को या डेटाबेस कनेक्शन को खोलते हैं, तो आप finally ब्लॉक में कनेक्शन बंद करने जैसे क्लीनअप कार्यों को एक्सेक्यूट कर सकते हैं क्योंकि इसे चलाने की गारंटी है।

एक्सेप्शन हैंडलिंग एक महत्वपूर्ण कोडिंग कौशल है, और आपको यह समझना चाहिए कि आपके एप्लीकेशन डेवलपमेंट के दौरान एक्सेप्शन को कैसे हैंडल किया जाएगा। इससे आपको अपने एप्लीकेशन में अप्रत्याशित एरर पता लगाने और रीकवर करने में मदद मिलेगी। मुझे आशा है कि यह पोस्ट आपको बेहतर एरर हैंडलिंग कोड लिखने के लिए प्रेरित करेगा!

निष्कर्ष

आज, हमने PHP try catch ब्लॉक का उपयोग कर एक्सेप्शन हैंडलिंग के विषय पर चर्चा की। लेख के पहले भाग में, हमने PHP में एक्सेप्शन की मूल बातों पर चर्चा की और यह दिखाने के लिए एक वास्तविक दुनिया का उदाहरण बनाया कि वे कैसे काम करते हैं। अंत में, हमने एक्सप्लोर किया कि आप कोर Exception क्लास को एक्सटेंड करके कस्टम एक्सेप्शन कैसे बना सकते हैं।

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.