परिचय
संस्करण 7 से पहले, PHP पार्सर विभिन्न स्थितियों के जवाब में एरर्स रिपोर्ट करता था। प्रत्येक एरर एक निश्चित पूर्वनिर्धारित प्रकार की होती थी। PHP 7 ने एरर रिपोर्टिंग के तंत्र को बदल दिया। पारंपरिक एरर रिपोर्टिंग के बजाय, अधिकांश एरर्स अब एक्सेप्शन फेंककर रिपोर्ट की जाती हैं।
यदि एरर एक्सेप्शन्स अनहैंडल्ड रहती हैं, तो एक फैटल एरर रिपोर्ट की जाती है और इसे पारंपरिक एरर कंडीशन की तरह हैंडल किया जाएगा। PHP की एरर हायरार्की Throwable इंटरफेस से शुरू होती है। ArithmeticError, AssertionError, CompileError और TypeError जैसे सभी पूर्वनिर्धारित एरर्स Throwable इंटरफेस को इम्प्लीमेंट करने वाली क्लासेज हैं। PHP 7 में Exception भी Throwable इंटरफेस को इम्प्लीमेंट करता है।
Throwable इंटरफेस
Throwable इंटरफेस किसी भी ऑब्जेक्ट के लिए बेस के रूप में कार्य करता है जिसे throw स्टेटमेंट के माध्यम से फेंका जा सकता है, जिसमें Error और Exception ऑब्जेक्ट्स शामिल हैं। एक यूजर-डिफाइंड क्लास सीधे Throwable इंटरफेस को इम्प्लीमेंट नहीं कर सकती। इसके बजाय, यूजर-डिफाइंड एक्सेप्शन क्लास घोषित करने के लिए, इसे Exception क्लास को एक्सटेंड करना होगा।
एक्सेप्शन हैंडलिंग घटक
PHP की एक्सेप्शन हैंडलिंग में throw, catch, try स्टेटमेंट्स होते हैं। एक्सेप्शन ऑब्जेक्ट उठाने के लिए throw कीवर्ड है। फेंके गए एक्सेप्शन्स catch ब्लॉक द्वारा प्रोसेस किए जाते हैं। संभावित रूप से एक्सेप्शन के लिए कमजोर PHP कोड try ब्लॉक में संलग्न होता है।
एक या अधिक catch ब्लॉक्स विभिन्न Exception क्लासेज के इंस्टेंसेज को पकड़ने के लिए मौजूद हो सकते हैं। जब try ब्लॉक में कोई एक्सेप्शन नहीं होता, तो सामान्य निष्पादन अंतिम catch ब्लॉक के बाद जारी रहेगा। हालांकि, जब try ब्लॉक के अंदर एक्सेप्शन फेंका जाता है, तो अगले स्टेटमेंट के निष्पादित होने के बजाय, PHP उस catch ब्लॉक को खोजने का प्रयास करता है जो हैंडल किए जाने वाले एक्सेप्शन के प्रकार से मेल खाता है। यदि कोई मिलान करने वाला catch ब्लॉक परिभाषित नहीं है, तो PHP पार्सर Uncaught Exception संदेश के साथ Fatal error रिपोर्ट करेगा।
आप finally ब्लॉक भी प्रदान कर सकते हैं या तो catch ब्लॉक्स के बाद या उनके बजाय। finally ब्लॉक में कोड हमेशा निष्पादित होगा, चाहे try ब्लॉक के अंदर एक्सेप्शन हो या नहीं।
एरर हायरार्की (PHP 7+)
Throwable (इंटरफेस)
├── Error
│ ├── ArithmeticError
│ ├── AssertionError
│ ├── CompileError
│ │ └── ParseError
│ ├── TypeError
│ │ └── ArgumentCountError
│ └── ValueError (PHP 8.0+)
└── Exception
├── LogicException
│ ├── BadFunctionCallException
│ ├── BadMethodCallException
│ ├── DomainException
│ ├── InvalidArgumentException
│ ├── LengthException
│ └── OutOfRangeException
└── RuntimeException
├── OutOfBoundsException
├── OverflowException
├── RangeException
├── UnderflowException
└── UnexpectedValueException
मुख्य परिवर्तन PHP 7 में
- फैटल एरर्स अब Error एक्सेप्शन फेंकती हैं (पकड़ी जा सकती हैं)।
- TypeError सख्त टाइप मोड में टाइप मिसमैच के लिए।
- ParseError include/eval के दौरान पार्स त्रुटियों के लिए।
- AssertionError assert() विफलता के लिए।
- ArithmeticError गणितीय त्रुटियों के लिए (जैसे div by zero, bitshift)।
- Error और Exception दोनों Throwable इम्प्लीमेंट करते हैं।
सभी catch करने के लिए Throwable उपयोग करें
<?php
try {
// कोड जो Error या Exception फेंक सकता है
} catch (Throwable $t) {
// दोनों Error और Exception यहां पकड़े जाएंगे
echo $t->getMessage();
}
?>