PHP कोशिश कैच उदाहरण: अपवाद और amp; ट्यूटोरियल को संभालने में त्रुटि

विषय - सूची:

Anonim

एक अपवाद क्या है?

एक त्रुटि एक अनपेक्षित प्रोग्राम परिणाम है जिसे प्रोग्राम द्वारा ही नियंत्रित नहीं किया जा सकता है।

प्रोग्राम को ठीक करके त्रुटियों को हल किया जाता है। त्रुटि का एक उदाहरण एक अनंत लूप होगा जो कभी भी निष्पादन को नहीं रोकता है।

एक अपवाद अप्रत्याशित कार्यक्रम परिणाम है जिसे कार्यक्रम द्वारा ही नियंत्रित किया जा सकता है।

अपवाद के उदाहरणों में एक फ़ाइल को खोलने की कोशिश करना शामिल है जो मौजूद नहीं है।

इस अपवाद को फ़ाइल बनाकर या फ़ाइल की खोज के विकल्प के साथ उपयोगकर्ता को प्रस्तुत करके नियंत्रित किया जा सकता है।

इस ट्यूटोरियल में, आप सीखेंगे-

  • अपवाद क्यों संभालें?
  • PHP त्रुटि से निपटने
  • उदाहरणों को संभालने में त्रुटि
  • त्रुटियों और अपवाद के बीच अंतर
  • एकाधिक अपवाद
  • कोड का परीक्षण

अपवाद क्यों संभालें?

  • हमारे पृष्ठों पर अप्रत्याशित परिणामों से बचें जो हमारे अंतिम उपयोगकर्ताओं के लिए बहुत कष्टप्रद या परेशान कर सकते हैं
  • दुर्भावनापूर्ण उपयोगकर्ता जो हमारे अनुप्रयोगों पर हमला करने के लिए उपयोग कर सकते हैं, जानकारी को उजागर नहीं करके हमारे अनुप्रयोगों की सुरक्षा में सुधार
  • किसी भी पूर्वानुमान योग्य त्रुटि होने पर प्रोग्राम के सामान्य प्रवाह को बदलने के लिए Php अपवाद का उपयोग किया जाता है।

PHP त्रुटि से निपटने

जब आपकी कॉन्फ़िगरेशन सेटिंग्स के आधार पर कोई त्रुटि उत्पन्न होती है, तो PHP वेब ब्राउज़र में त्रुटि संदेश को उस त्रुटि से संबंधित जानकारी के साथ प्रदर्शित करती है।

PHP त्रुटियों को संभालने के कई तरीके प्रदान करती है।

हम तीन (3) आमतौर पर इस्तेमाल की जाने वाली विधियों को देखने जा रहे हैं;

  1. डाई स्टेटमेंट - डाई फंक्शन एक में इको और एग्जिट फंक्शन को जोड़ती है। जब हम किसी संदेश को आउटपुट करना चाहते हैं और त्रुटि होने पर स्क्रिप्ट निष्पादन को रोकना बहुत उपयोगी होता है।
  2. कस्टम त्रुटि हैंडलर - ये उपयोगकर्ता परिभाषित कार्य हैं जिन्हें जब भी कोई त्रुटि होती है, कहा जाता है।
  3. PHP त्रुटि रिपोर्टिंग - आपकी PHP त्रुटि रिपोर्टिंग सेटिंग्स के आधार पर त्रुटि संदेश। यह विधि विकास के माहौल में बहुत उपयोगी है जब आपको पता नहीं है कि क्या त्रुटि हुई। प्रदर्शित जानकारी आपके आवेदन को डीबग करने में आपकी मदद कर सकती है।

उदाहरणों को संभालने में त्रुटि

आइए अब त्रुटि हैंडलिंग दिनचर्या के साथ कुछ सरल उदाहरण देखें।

मान लीजिए कि हमने एक एप्लिकेशन विकसित किया है जो डेटा संग्रहीत करने के लिए पाठ फ़ाइलों का उपयोग करता है। इससे पहले कि हम इससे डेटा पढ़ने का प्रयास करें, हम फ़ाइल के अस्तित्व की जांच करना चाहते हैं।

नीचे दिया गया कोड उपरोक्त उदाहरण को लागू करता है।

मान लें कि आपने फ़ाइल simple_error.php को phptuts फ़ोल्डर में सहेजा है, URL http: //localhost/phptuts/simple_error.php खोलें।

आपको निम्न परिणाम मिलेंगे

जैसा कि आप ऊपर के परिणामों से देख सकते हैं, यह हमारे आवेदन को अव्यवसायिक बनाता है और उपयोगकर्ता को परेशान कर सकता है।

हम उपरोक्त कोड को संशोधित करेंगे और आवेदन के लिए एक त्रुटि हैंडलर लिखेंगे

मान लें कि आपने उपरोक्त कोड को error_handling.php के रूप में सहेजा है, तो URL खोलें http: //localhost/phptuts/error_handling.php

नोट: संदेश को "फ़ाइल नहीं मिला" जैसे संदेश दिखाने के बजाय ऊपर दिखाए गए संदेश को प्रदर्शित करना एक अच्छा सुरक्षा अभ्यास है।

आइए एक और उदाहरण देखें जो कस्टम त्रुटि हैंडलर का उपयोग करता है।

कस्टम त्रुटि हैंडलर डिफ़ॉल्ट PHP त्रुटि हैंडलिंग फ़ंक्शन के रूप में सेट किया जाएगा और मूल रूप से एक त्रुटि संख्या और संदेश प्रदर्शित करेगा।

नीचे दिया गया कोड उपरोक्त उदाहरण के कार्यान्वयन को दिखाता है

URL खोलें http: //localhost/phptuts/custom_error_handler.php आपको निम्नलिखित परिणाम मिलेंगे

जैसा कि आप उपरोक्त उदाहरण से देख सकते हैं, कस्टम त्रुटि हैंडलर उस अर्थ में शक्तिशाली हैं

  • वे हमें त्रुटि संदेशों को अनुकूलित करने की अनुमति देते हैं।
  • कस्टम त्रुटि हैंडलर में फ़ाइल / डेटाबेस में त्रुटि लॉगिंग, डेवलपर को ईमेल करना आदि शामिल हो सकते हैं।

आइए अब तीसरे प्रकार के एरर हैंडलिंग को देखें। हम function error_reporting फ़ंक्शन में निर्मित PHP का उपयोग करेंगे। इसमें निम्नलिखित मूल वाक्यविन्यास हैं

यहां,

  • "Error_reporting" PHP त्रुटि रिपोर्टिंग फ़ंक्शन है
  • "$ रिपोर्टिंग_लेवल" वैकल्पिक है, इसका उपयोग रिपोर्टिंग स्तर निर्धारित करने के लिए किया जा सकता है। यदि कोई रिपोर्टिंग स्तर निर्दिष्ट नहीं किया गया है, तो PHP php.ini फ़ाइल में निर्दिष्ट के रूप में डिफ़ॉल्ट त्रुटि रिपोर्टिंग स्तर का उपयोग करेगा।
रिपोर्टिंग स्तर विवरण उदाहरण
E_WARNING केवल चेतावनी संदेश प्रदर्शित करता है। स्क्रिप्ट के निष्पादन को रोक नहीं है error_reporting (E_WARNING);
E_NOTICE ऐसे नोटिस प्रदर्शित करता है जो किसी प्रोग्राम के सामान्य निष्पादन के दौरान हो सकते हैं या एक त्रुटि हो सकती है। error_reporting (E_ NOTICE);
E_USER_ERROR उपयोगकर्ता द्वारा जनरेट की गई त्रुटि यानी कस्टम एरर हैंडलर प्रदर्शित करता है error_reporting (E_ USER_ERROR);
E_USER_WARNING उपयोगकर्ता उत्पन्न चेतावनी संदेश प्रदर्शित करता है error_reporting (E_USER_WARNING);
E_USER_NOTICE उपयोगकर्ता जनित सूचनाएँ प्रदर्शित करता है error_reporting (E_USER_NOTICE);
E_RECOVERABLE_ERROR त्रुटि प्रदर्शित करता है जो घातक नहीं हैं और कस्टम त्रुटि हैंडलर का उपयोग करके नियंत्रित किया जा सकता है error_reporting (E_RECOVERABLE_ERROR);
E_ALL सभी त्रुटियों और चेतावनियों को प्रदर्शित करता है error_reporting (E_ ALL);

त्रुटियों और अपवाद के बीच अंतर

  • अपवादों को फेंक दिया जाता है और पकड़े जाने का इरादा होता है, जबकि त्रुटियां आमतौर पर अपरिवर्तनीय होती हैं।
  • अपवादों को एक वस्तु उन्मुख तरीके से नियंत्रित किया जाता है।

    इसका मतलब है जब एक अपवाद फेंक दिया जाता है; एक अपवाद ऑब्जेक्ट बनाया जाता है जिसमें अपवाद विवरण होते हैं।

नीचे दी गई तालिका अपवाद वस्तु विधियों को दिखाती है

तरीका विवरण उदाहरण
getMessage () अपवाद का संदेश प्रदर्शित करता है
getMessage();?>
कोड प्राप्त करें() संख्यात्मक कोड प्रदर्शित करता है जो अपवाद का प्रतिनिधित्व करता है
getCode();?>
दस्तावेज लें() फ़ाइल नाम और पथ प्रदर्शित करता है जहां अपवाद हुआ
getFile();?>
लाइन में आओ() वह पंक्ति संख्या प्रदर्शित करता है जहाँ अपवाद हुआ
getLine();?>
GetTrace () अपवाद से पहले बैकट्रेस की एक सरणी प्रदर्शित करता है
getTrace());?>
getPrepret () वर्तमान अपवाद को पिछले एक से पहले प्रदर्शित करता है
getPrevious();?>
getTraceAsString () एक सरणी के बजाय एक स्ट्रिंग के रूप में अपवाद का बैकट्रेस प्रदर्शित करता है
getTraceAsString();?>
__स्ट्रिंग() एक स्ट्रिंग के रूप में पूरे अपवाद को प्रदर्शित करता है
__toString();?>

नीचे एक अपवाद फेंकने के लिए मूल वाक्यविन्यास है।

यहां,

  • "फेंक" अपवाद को फेंकने के लिए उपयोग किया जाने वाला कीवर्ड है
  • "नया अपवाद (...)" एक अपवाद ऑब्जेक्ट बनाता है और पास करता है "यह एक अपवाद उदाहरण है" स्ट्रिंग के रूप में संदेश पैरामीटर।

उपरोक्त कोड निम्न संदेश को आउटपुट करता है।

अब हम एक उदाहरण को देखने जा रहे हैं जो फेंक और अपवादों को पकड़ता है।

हम उपरोक्त उदाहरण को संशोधित करेंगे और कोशिश, फेंक और पकड़ शामिल करेंगे।

इसमें निम्नलिखित मूल वाक्यविन्यास हैं।

यहां,

  • "कोशिश {...}" निष्पादित किए जाने वाले कोड का ब्लॉक है जो संभावित रूप से एक अपवाद उठा सकता है
  • "पकड़ (अपवाद $ ई) {…}" कोड का वह खंड है जो फेंके गए अपवाद को पकड़ता है और अपवाद वस्तु को चर $ e पर असाइन करता है।

नीचे दिया गया कोड लागू किए गए अपवाद को आज़माने, पकड़ने और पकड़ने के साथ मूल अपवाद उदाहरण दिखाता है।

कार्यक्रम जानबूझकर एक अपवाद फेंकता है जिसे वह तब पकड़ता है।

getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>

URL http खोलें : //localhost/phptuts/exception_handling.php आपको निम्नलिखित परिणाम मिलेंगे।

अपवाद के प्रकार के आधार पर एक php ट्राइ स्टेटमेंट के लिए कई अपवाद बनाना भी संभव है।

MySQL, PHP डेटा एक्सेस पर लेख देखें

... कई अपवादों के कार्यान्वयन के उदाहरणों के लिए

एकाधिक अपवाद

कई अपवाद फेंके गए अपवादों को संभालने के लिए एकाधिक प्रयास पकड़ने वाले ब्लॉक का उपयोग करते हैं। जब कई अपवाद उपयोगी होते हैं;

  • आप फेंक दिए गए अपवाद के आधार पर एक अनुकूलित संदेश प्रदर्शित करना चाहते हैं
  • आप अपवाद के आधार पर एक अद्वितीय ऑपरेशन करना चाहते हैं

नीचे फ़्लोचार्ट दिखाता है कि कैसे कई अपवाद काम करते हैं

आइए एक उदाहरण देखें जो कई अपवादों का उपयोग करता है।

हम उस कोड को संशोधित करेंगे जो किसी संख्या को भाजक द्वारा पारित कर देता है।

हम दो प्रकार के अपवादों की उम्मीद करते हैं;

  • शून्य से विभाजन
  • ऋणात्मक संख्या द्वारा विभाजन

सादगी के लिए, हम केवल अपने कैच ब्लॉक में अपवाद प्रकार प्रदर्शित करेंगे।

अपवाद वर्ग में निर्मित PHP का उपयोग अपवादों को फेंकने के लिए किया जाता है।

हम दो कक्षाएं बनाएंगे जो अपवाद वर्ग का विस्तार करेंगे और अपवादों को फेंकने के लिए उनका उपयोग करेंगे।

नीचे दिया गया कोड कार्यान्वयन दिखाता है।

कोड का परीक्षण

हम मान लेंगे कि आपने phtuts फ़ोल्डर में कई_exception.php सहेजे हैं।

URL पर ब्राउज़ करें http: //localhost/phptuts/multiple_exception.php

PHP फ़ाइल पर वापस जाएं और पैरामीटर को निम्न आरेख में दिखाए अनुसार -1 पास करें।

URL पर ब्राउज़ करें http: //localhost/phptuts/multiple_exception.php

आपको क्या परिणाम मिलते हैं? 3 पैरामीटर के रूप में पास करें।

आपको क्या परिणाम मिलते हैं?

सारांश

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