परिचय
Exception क्लास Throwable इंटरफेस को इम्प्लीमेंट करती है और सभी Exception क्लासेज (पूर्वनिर्धारित और यूजर-डिफाइंड) के लिए बेस क्लास है। Exception क्लास Throwable इंटरफेस से कुछ final (नॉन-ओवरराइडेबल) मेथड्स को परिभाषित करती है, और __toString() मेथड जो एक्सेप्शन ऑब्जेक्ट के स्ट्रिंग प्रतिनिधित्व को लौटाने के लिए ओवरराइड किया जा सकता है।
Exception क्लास के Final मेथड्स
| मेथड | विवरण |
|---|---|
| final public getMessage() | एक्सेप्शन का मैसेज |
| final public getCode() | एक्सेप्शन का कोड |
| final public getFile() | सोर्स फाइलनाम |
| final public getLine() | सोर्स लाइन |
| final public getTrace() | बैकट्रेस की सरणी |
| final public getPrevious() | पिछला एक्सेप्शन |
| final public getTraceAsString() | फॉर्मेटेड स्ट्रिंग ऑफ ट्रेस |
| public __toString() | डिस्प्ले के लिए फॉर्मेटेड स्ट्रिंग (ओवरराइडेबल) |
यदि यूजर-डिफाइंड एक्सेप्शन क्लास कंस्ट्रक्टर को रीडिफाइन करती है, तो यह सुनिश्चित करने के लिए parent::__construct() कॉल करना चाहिए कि सभी उपलब्ध डेटा ठीक से असाइन किया गया है।
उदाहरण: कस्टम एक्सेप्शन क्लास
निम्न स्क्रिप्ट myException नामक एक कस्टम एक्सेप्शन क्लास परिभाषित करती है। यदि $num का मान 0 से कम या 100 से अधिक है तो इस प्रकार का एक्सेप्शन फेंका जाता है। Exception क्लास का getMessage() मेथड एरर मैसेज लौटाता है और getLine() मेथड वह लाइन लौटाता है जिसमें एक्सेप्शन प्रकट होता है।
<?php
class myException extends Exception {
function message() {
return "error: " . $this->getMessage() . " in line no " . $this->getLine();
}
}
$num = 125;
try {
if ($num > 100 || $num < 0) {
throw new myException("$num is invalid number");
} else {
echo "$num is a valid number";
}
} catch (myException $m) {
echo $m->message();
}
?>
आउटपुट ($num=125 के साथ)
error: 125 is invalid number in line no 10
आउटपुट ($num=90 के साथ)
90 is a valid number
एडवांस्ड कस्टम एक्सेप्शन
कस्टम प्रॉपर्टीज़ और कंस्ट्रक्टर के साथ:
<?php
class ValidationException extends Exception {
private $field;
private $value;
public function __construct(string $message, string $field, $value, int $code = 0, Throwable $previous = null) {
parent::__construct($message, $code, $previous);
$this->field = $field;
$this->value = $value;
}
public function getField(): string {
return $this->field;
}
public function getValue() {
return $this->value;
}
public function __toString(): string {
return __CLASS__ . ": [{$this->code}]: {$this->message} (Field: {$this->field}, Value: " . var_export($this->value, true) . ")\n";
}
}
// उपयोग
try {
throw new ValidationException("Invalid email", "email", "not-an-email", 400);
} catch (ValidationException $e) {
echo $e->getField(); // "email"
echo $e->getValue(); // "not-an-email"
echo $e; // कस्टम __toString आउटपुट
}
?>
मुख्य बिंदु
- कस्टम एक्सेप्शन Exception को एक्सटेंड करना चाहिए (Throwable को सीधे इम्प्लीमेंट नहीं कर सकते)।
- कंस्ट्रक्टर ओवरराइड करते समय
parent::__construct()कॉल करें। __toString()ओवरराइड करके कस्टम स्ट्रिंग प्रतिनिधित्व प्रदान कर सकते हैं।- अतिरिक्त प्रॉपर्टीज़ (फील्ड, वैल्यू, आदि) जोड़कर अधिक संदर्भ प्रदान करें।
- PHP 8.0+ में
getPrevious()के साथ एक्सेप्शन चेनिंग समर्थित है।