PHP में त्रुटि प्रबंधन: try/catch और उससे आगे — पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP में त्रुटि प्रबंधन: बुनियादी संरचनाओं से पेशेवर पैटर्न तक

\n\n

कोई भी PHP-डेवलपर देर-सबेर ऐसी स्थिति का सामना करता है जहाँ कोड अपेक्षा के अनुसार व्यवहार नहीं करता। फ़ाइल नहीं मिली, डेटाबेस उपलब्ध नहीं है, उपयोगकर्ता ने गलत डेटा दर्ज किया — ये सब अपवाद स्थितियाँ हैं। उचित त्रुटि प्रबंधन एक नाजुक एप्लिकेशन को एक विश्वसनीय सिस्टम में बदल देता है। इस लेख में, हम PHP में त्रुटियों के साथ काम करने के सभी पहलुओं को कवर करेंगे: सरल try/catch से लेकर अपने स्वयं के अपवाद वर्ग और वैश्विक हैंडलर बनाने तक।

\n\n

1. मूल बातें: try/catch और throw संरचना

\n\n

PHP में, अपवाद Exception वर्ग (या इसके उत्तराधिकारियों) की वस्तुएँ हैं। मूल तंत्र तीन मुख्य कीवर्ड से बना है:

\n\n
    \n
  • try — वह ब्लॉक जिसमें संभावित रूप से खतरनाक कोड निष्पादित होता है;
  • \n
  • catch — वह ब्लॉक जो अपवाद को पकड़ता है;
  • \n
  • throw — ऑपरेटर जो अपवाद को "फेंकता" है।
  • \n
\n\n

सबसे सरल उदाहरण देखें:

\n\n
<?php\nfunction divide($a, $b) {\n    if ($b == 0) {\n        throw new Exception('शून्य से भाग देना संभव नहीं');\n    }\n    return $a / $b;\n}\n\ntry {\n    echo divide(10, 0);\n} catch (Exception $e) {\n    echo 'त्रुटि: ' . $e->getMessage();\n}\n?>
\n\n

जब निष्पादन throw तक पहुँचता है, PHP तुरंत वर्तमान फ़ंक्शन छोड़ देता है और उपयुक्त catch ब्लॉक की तलाश करता है। यदि catch मिल जाता है, तो निष्पादन वहाँ से जारी रहता है। यदि नहीं, तो एक घातक त्रुटि उत्पन्न होती है।

\n\n

महत्वपूर्ण: PHP 7 से शुरू करके, अधिकांश आंतरिक त्रुटियाँ (जैसे शून्य से भाग) DivisionByZeroError वर्ग के अपवाद फेंकने लगीं। उन्हें पकड़ने के लिए, आपको संबंधित प्रकार निर्दिष्ट करना होगा।

\n\n

2. उन्नत सुविधाएँ: एकाधिक catch और finally

\n\n

अक्सर एक ही try ब्लॉक में विभिन्न प्रकार के अपवाद उत्पन्न हो सकते हैं। PHP विभिन्न वर्गों के लिए कई catch ब्लॉक बनाने की अनुमति देता है:

\n\n
<?php\nclass ValidationException extends Exception {}\nclass DatabaseException extends Exception {}\n\ntry {\n    // कोड जो विभिन्न अपवाद फेंक सकता है\n} catch (ValidationException $e) {\n    echo 'सत्यापन त्रुटि: ' . $e->getMessage();\n} catch (DatabaseException $e) {\n    echo 'डेटाबेस त्रुटि: ' . $e->getMessage();\n} catch (Exception $e) {\n    // अन्य सभी अपवादों के लिए सामान्य हैंडलर\n    echo 'अज्ञात त्रुटि: ' . $e->getMessage();\n}\n?>
\n\n

catch ब्लॉक का क्रम मायने रखता है: PHP उन्हें क्रमिक रूप से जाँचता है, और पहला उपयुक्त प्रकार अपवाद को पकड़ लेता है। इसलिए सामान्य catch (Exception $e) हमेशा अंत में रखा जाता है।

\n\n

finally ब्लॉक हर स्थिति में निष्पादित होता है — try के सफल समापन के बाद, अपवाद पकड़े जाने के बाद, और यहाँ तक कि अगर catch में return ऑपरेटर हो। यह फ़ाइलें बंद करने, संसाधनों को मुक्त करने या लॉग में लिखने के लिए आदर्श स्थान है:

\n\n
<?php\nfunction readConfig($filename) {\n    $handle = fopen($filename, 'r');\n    if (!$handle) {\n        throw new Exception('फ़ाइल खोलने में विफल');\n    }\n    try {\n        // डेटा पढ़ना\n        return fread($handle, filesize($filename));\n    } finally {\n        fclose($handle); // अपवाद होने पर भी फ़ाइल बंद हो जाएगी\n    }\n}\n?>
\n\n

3. कस्टम अपवाद वर्ग और वैश्विक हैंडलर

\n\n

अपने स्वयं के अपवाद वर्ग बनाना कोड को संरचित करने का एक शक्तिशाली उपकरण है। बस Exception से विरासत प्राप्त करें:

\n\n
<?php\nclass InvalidEmailException extends Exception {\n    public function __construct($email, $code = 0, Throwable $previous = null) {\n        $message = "ईमेल '$email' का प्रारूप अमान्य है";\n        parent::__construct($message, $code, $previous);\n    }\n}\n\nfunction validateEmail($ema                

ब्लॉग

पुस्तक अनुशंसाएँ