परिचय
PHP एक try ब्लॉक के बाद catch ब्लॉक्स की श्रृंखला की अनुमति देता है ताकि विभिन्न एक्सेप्शन केसेज को हैंडल किया जा सके। विभिन्न catch ब्लॉक्स का उपयोग पूर्वनिर्धारित एक्सेप्शन्स और एरर्स के साथ-साथ यूजर-डिफाइंड एक्सेप्शन्स को हैंडल करने के लिए किया जा सकता है।
उदाहरण: मल्टीपल catch ब्लॉक्स
निम्न उदाहरण DivisionByZeroError, TypeError, ArgumentCountError और InvalidArgumentException स्थितियों को प्रोसेस करने के लिए catch ब्लॉक्स का उपयोग करता है। सामान्य Exception को हैंडल करने के लिए भी एक catch ब्लॉक है।
<?php
declare(strict_types=1);
function divide(int $a, int $b): int {
return $a / $b;
}
$a = 10;
$b = 0;
try {
if (!$b) {
throw new DivisionByZeroError('Division by zero.');
}
if (is_int($a) == FALSE || is_int($b) == FALSE) {
throw new InvalidArgumentException("Invalid type of arguments");
}
$result = divide($a, $b);
echo $result;
}
catch (TypeError $x) {
echo $x->getMessage();
}
catch (DivisionByZeroError $y) {
echo $y->getMessage();
}
catch (ArgumentCountError $z) {
echo $z->getMessage();
}
catch (InvalidArgumentException $i) {
echo $i->getMessage();
}
catch (Exception $ex) {
echo $ex->getMessage();
}
?>
विभिन्न परिदृश्यों के लिए आउटपुट
1. डिनोमिनेटर 0 होने पर ($b=0)
Division by zero.
2. $b=3 सेट करने पर (TypeError क्योंकि divide int रिटर्न करने की उम्मीद करता है लेकिन डिवीजन फ्लोट देता है)
Return value of divide() must be of the type integer, float returned
3. divide फंक्शन में केवल एक आर्गुमेंट पास करने पर ($res=divide($a))
Too few arguments to function divide(), 1 passed ... and exactly 2 expected
4. यदि आर्गुमेंट्स में से एक इंटीजर नहीं है
Invalid type of arguments
महत्वपूर्ण नियम
- Catch ब्लॉक्स को विशिष्ट से सामान्य क्रम में रखें (सबक्लास से पहले, पैरेंट क्लास बाद में)।
- PHP 7.1+ में एक ही catch में मल्टीपल एक्सेप्शन टाइप्स:
catch (TypeError | ArgumentCountError $e) - यदि कोई catch मैच नहीं करता, तो Uncaught Exception फैटल एरर होती है।
- finally ब्लॉक हमेशा निष्पादित होता है (अगले आर्टिकल देखें)।
PHP 7.1+ मल्टी-कैच सिंटैक्स
try {
// कोड
} catch (TypeError | ArgumentCountError | DivisionByZeroError $e) {
echo "Error: " . $e->getMessage();
} catch (Exception $e) {
echo "General: " . $e->getMessage();
}