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

PHP एक्सेप्शन एक्सटेंड करना: कस्टम एक्सेप्शन क्लास बनाना


परिचय

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() के साथ एक्सेप्शन चेनिंग समर्थित है।
  1. - PHP max() फ़ंक्शन - अधिकतम मान ढूंढना

    PHP का max() फ़ंक्शन **सरणी में सबसे बड़ा तत्व** या **दिए गए पैरामीटर्स में सबसे बड़ा मान** लौटाता है। यह min() का पूरक है और समान नियमों का पालन करता है। सिंटैक्स max(array $values): mixed // या max(mixed $value1, mixed $value2, ...): mixed पैरामीटर्स पैरामीटरविवरण $valuesसरणी (एकमात्र पैरामी

  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