Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP नेस्टेड एक्सेप्शन: try-catch ब्लॉक्स की नेस्टिंग


परिचय

try-catch ब्लॉक्स को किसी भी वांछित स्तर तक नेस्ट किया जा सकता है। एक्सेप्शन्स को उपस्थिति के रिवर्स ऑर्डर में हैंडल किया जाता है यानी इनरमोस्ट एक्सेप्शन प्रोसेसिंग पहले की जाती है।

उदाहरण: नेस्टेड try-catch

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

<?php
class myException extends Exception {
    function message() {
        return "error: " . $this->getMessage() . " in line no " . $this->getLine();
    }
}

$x = 10;
$y = 0;

try {
    if (is_numeric($x) == FALSE || is_numeric($y) == FALSE) {
        throw new myException("Non numeric data");
    }
} catch (myException $m) {
    echo $m->message();
    return;
}

if ($y == 0) {
    throw new DivisionByZeroError("Division by 0");
}

echo $x / $y;

} catch (DivisionByZeroError $e) {
    echo $e->getMessage() . " in line no " . $e->getLine();
}
?>

आउटपुट (y=0 के साथ)

Division by 0 in line no 19

आउटपुट (किसी एक वेरिएबल को नॉन-न्यूमेरिक बनाने पर)

error: Non numeric data in line no 20

आउटपुट (यदि दोनों वेरिएबल्स नंबर हैं)

उनका विभाजन प्रिंट होता है।

मुख्य बिंदु

  • नेस्टेड try-catch ब्लॉक्स इनर-टू-आउटर ऑर्डर में निष्पादित होते हैं।
  • यदि इनर catch एक्सेप्शन हैंडल करता है और return/throw नहीं करता, तो आउटर catch नहीं चलेगा।
  • यूजर-डिफाइंड एक्सेप्शन्स Exception क्लास को एक्सटेंड करनी चाहिए।
  • Throwable इंटरफेस Error और Exception दोनों का बेस है।
  • PHP 7+ में Throwable को catch करके दोनों Error और Exception पकड़े जा सकते हैं।

सुधारित उदाहरण (सही ब्रेसेस के साथ)

<?php
class myException extends Exception {
    function message() {
        return "error: " . $this->getMessage() . " in line no " . $this->getLine();
    }
}

$x = 10;
$y = 0;

try {
    try {
        if (is_numeric($x) == FALSE || is_numeric($y) == FALSE) {
            throw new myException("Non numeric data");
        }
    } catch (myException $m) {
        echo $m->message();
        return;
    }

    if ($y == 0) {
        throw new DivisionByZeroError("Division by 0");
    }

    echo $x / $y;
} catch (DivisionByZeroError $e) {
    echo $e->getMessage() . " in line no " . $e->getLine();
}
?>
  1. - PHP में set_exception_handler() फंक्शन

    PHP में set_exception_handler() फंक्शन अपवादों को संभालने के लिए उपयोगकर्ता-परिभाषित फंक्शन सेट करता है। यदि अपवाद try/catch ब्लॉक के भीतर नहीं पकड़ा जाता है तो यह डिफ़ॉल्ट अपवाद हैंडलर सेट करता है। अपवाद हैंडलर कॉल होने के बाद निष्पादन रुक जाएगा। सिंटैक्स set_exception_handler(exception_handler)

  1. - PHP में restore_exception_handler() फंक्शन

    PHP में restore_exception_handler() फंक्शन पिछले अपवाद हैंडलर को पुनर्स्थापित करता है। इसका उपयोग set_exception_handler() का उपयोग करके अपवाद हैंडलर फंक्शन बदलने के बाद, पिछले अपवाद हैंडलर (जो बिल्ट-इन या उपयोगकर्ता-परिभाषित फंक्शन हो सकता है) पर वापस जाने के लिए किया जाता है। सिंटैक्स restore_exce

  1. - C# में अपवाद (Exception) संचालन

    अपवाद प्रोग्राम निष्पादन के दौरान उत्पन्न होने वाली समस्या है। C# अपवाद असाधारण परिस्थितियों का जवाब है, जैसे शून्य से विभाजन का प्रयास। अपवाद प्रोग्राम के एक भाग से दूसरे भाग में नियंत्रण स्थानांतरित करने का तरीका प्रदान करते हैं। C# अपवाद संचालन चार कीवर्ड्स पर आधारित है: try - वह कोड ब्लॉक पहचा