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

PHP एक्सेप्शन फेंकना: try-catch और Throwable इंटरफेस


परिचय

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
  1. C++ में एक्सेप्शन कैसे काम करते हैं C++ में एक्सेप्शन कैसे काम करते हैं

    परिचयC++ में एक्सेप्शन हैंडलिंग रनटाइम त्रुटियों को संभालने की एक प्रक्रिया है। एक्सेप्शन एक घटना है जो C++ में रनटाइम पर फेंकी जाती है। सभी एक्सेप्शन std::exception क्लास से प्राप्त होते हैं। यह एक रनटाइम त्रुटि है जिसे संभाला जा सकता है। यदि हम एक्सेप्शन को नहीं संभालते हैं तो यह एक्सेप्शन संदेश प

  1. Pry में अपवाद हैंडलिंग में महारत हासिल करें: Rails कंसोल के लिए उन्नत तकनीकें Pry में अपवाद हैंडलिंग में महारत हासिल करें: Rails कंसोल के लिए उन्नत तकनीकें

    यदि आप मेरी तरह हैं, तो आप Rails कंसोल का बहुत उपयोग करते हैं। और अब तक मुझे लगता है कि हर कोई सहमत है कि Pry, Rails कंसोल के लिए अब तक की सबसे अच्छी चीज है... ठीक है, कभी भी। Pry में अंतर्निहित कुछ वास्तव में कूल फीचर्स हैं जो अपवादों के साथ काम करना सादे पुराने IRB की तुलना में बहुत आसान बनाते हैं

  1. Ruby में कस्टम अपवाद में महारत हासिल करें: एक चरण-दर-चरण गाइड Ruby में कस्टम अपवाद में महारत हासिल करें: एक चरण-दर-चरण गाइड

    Ruby में अपने स्वयं के अपवाद बनाना आसान है। बस इन चरणों का पालन करें: 1. एक नई क्लास बनाएं अपवाद क्लास हैं, Ruby में बाकी सब की तरह! एक नए प्रकार का अपवाद बनाने के लिए, बस एक क्लास बनाएं जो StandardError, या उसके बच्चों में से एक से इनहेरिट करती है। class MyError < StandardError end raise MyError