परिचय
Throwable इंटरफेस Error और Exception क्लास द्वारा इम्प्लीमेंट किया जाता है। सभी पूर्वनिर्धारित Error क्लासेज Error क्लास से इनहेरिट होती हैं। संबंधित Error क्लास का इंस्टेंस try ब्लॉक के अंदर फेंका जाता है और उपयुक्त catch ब्लॉक के अंदर प्रोसेस किया जाता है।
एक्सेप्शन फेंकना
सामान्य निष्पादन (जब try ब्लॉक के भीतर कोई एक्सेप्शन नहीं फेंका जाता) अंतिम catch ब्लॉक के बाद परिभाषित क्रम में जारी रहता है।
उदाहरण 1: बेसिक एक्सेप्शन हैंडलिंग
<?php
function div($x, $y) {
if (!$y) {
throw new Exception('Division by zero.');
}
return $x / $y;
}
try {
echo div(10, 5) . "\n";
echo div(10, 0) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// निष्पादन जारी रखें
echo "Execution continues\n";
?>
आउटपुट
2 Caught exception: Division by zero. Execution continues
उदाहरण 2: TypeError पकड़ना
निम्न उदाहरण में, TypeError फेंका जाता है जब एक फंक्शन निष्पादित होता है क्योंकि उपयुक्त आर्गुमेंट्स पास नहीं किए गए हैं।
<?php
function add(int $num1, int $num2) {
return $num1 + $num2;
}
try {
$value = add(1, 'one');
} catch (TypeError $e) {
echo $e->getMessage() . "\n";
}
?>
आउटपुट
Argument 2 passed to add() must be of the type integer, string given
SPL एक्सेप्शन्स (Standard PHP Library)
मानक PHP लाइब्रेरी में पूर्वनिर्धारित एक्सेप्शन्स होते हैं:
| एक्सेप्शन | विवरण |
|---|---|
| LogicException | प्रोग्राम लॉजिक में त्रुटि को दर्शाता है |
| BadFunctionCallException | अपरिभाषित फंक्शन कॉलबैक या मिसिंग आर्गुमेंट्स |
| BadMethodCallException | अपरिभाषित मेथड कॉलबैक या मिसिंग आर्गुमेंट्स |
| DomainException | मान परिभाषित वैध डेटा डोमेन का पालन नहीं करता |
| InvalidArgumentException | आर्गुमेंट अपेक्षित प्रकार का नहीं है |
| LengthException | लंबाई अमान्य है |
| OutOfRangeException | अवैध इंडेक्स अनुरोध किया गया |
| RuntimeException | रनटाइम पर पाई जाने वाली त्रुटि |
| OutOfBoundsException | मान वैध कुंजी नहीं है |
| OverflowException | पूर्ण कंटेनर में एलिमेंट जोड़ने पर |
| RangeException | प्रोग्राम निष्पादन के दौरान रेंज त्रुटियां |
| UnderflowException | खाली कंटेनर पर अमान्य ऑपरेशन |
| UnexpectedValueException | मान सेट ऑफ वैल्यूज़ से मेल नहीं खाता |
उदाहरण: OutOfBoundsException
<?php
$arr = array("one" => 1, "two" => 2, "three" => 3, "four" => 4);
$key = "ten";
try {
if (array_key_exists($key, $arr) == FALSE) {
throw new OutOfBoundsException("key not found");
} else {
echo $arr[$key];
}
} catch (OutOfBoundsException $e) {
echo $e->getMessage() . "\n";
}
?>
आउटपुट
key not found
एक्सेप्शन हायरार्की
Throwable
├── Error
│ ├── ArithmeticError
│ ├── AssertionError
│ ├── CompileError
│ ├── TypeError
│ └── ...
└── Exception
├── LogicException
│ ├── BadFunctionCallException
│ ├── BadMethodCallException
│ ├── DomainException
│ ├── InvalidArgumentException
│ ├── LengthException
│ └── OutOfRangeException
└── RuntimeException
├── OutOfBoundsException
├── OverflowException
├── RangeException
├── UnderflowException
└── UnexpectedValueException