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

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

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

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

PHP में त्रुटि प्रबंधन: try/catch और उससे आगे



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



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



आधुनिक PHP में त्रुटियों को संभालने का सबसे सामान्य तरीका try/catch संरचना है। यह एक अपवाद (Throwable वर्ग या इसके वंशजों की वस्तु) को "पकड़ने" और स्क्रिप्ट के आपातकालीन समाप्ति के बजाय वैकल्पिक कोड निष्पादित करने की अनुमति देता है।



मूल सिंटैक्स इस प्रकार है:

<?phptry {    // कोड जो अपवाद फेंक सकता है    $file = fopen('data.txt', 'r');    if (!$file) {        throw new Exception('फ़ाइल खोलने में विफल');    }    // फ़ाइल के साथ काम करना...} catch (Exception $e) {    // त्रुटि प्रबंधन    echo 'एक त्रुटि हुई: ' . $e->getMessage();}?>


try ब्लॉक में संभावित रूप से खतरनाक कोड रखा जाता है। यदि इसके अंदर कोई अपवाद होता है (throw के माध्यम से या PHP की आंतरिक त्रुटि के कारण), तो निष्पादन तुरंत catch ब्लॉक में चला जाता है। चर $e में अपवाद वस्तु होती है, जिसके तरीकों को कॉल किया जा सकता है:

  • getMessage() — त्रुटि का पाठ;
  • getCode() — त्रुटि का संख्यात्मक कोड;
  • getFile() — फ़ाइल जहाँ त्रुटि हुई;
  • getLine() — वह पंक्ति जिसने त्रुटि उत्पन्न की।


2. finally ब्लॉक: कोड जो हमेशा निष्पादित होता है



कभी-कभी त्रुटि होने या न होने पर भी कुछ कार्य करने की आवश्यकता होती है — उदाहरण के लिए, डेटाबेस कनेक्शन बंद करना या संसाधनों को मुक्त करना। इसके लिए finally ब्लॉक का उपयोग किया जाता है:

<?phpfunction processData($data) {    try {        // खतरनाक ऑपरेशन        if (empty($data)) {            throw new InvalidArgumentException('डेटा खाली नहीं हो सकता');        }        echo "डेटा प्रसंस्करण...";        return true;    } catch (InvalidArgumentException $e) {        echo "त्रुटि: " . $e->getMessage() . "";        return false;    } finally {        echo "finally ब्लॉक हमेशा निष्पादित होता है।";    }}

processData([]); // आउटपुट: त्रुटि: डेटा खाली नहीं हो सकता, फिर finally ब्लॉकprocessData('test'); // आउटपुट: डेटा प्रसंस्करण..., फिर finally ब्लॉक?>


finally ब्लॉक तब भी निष्पादित होता है जब try या catch में return स्टेटमेंट हो। यह संसाधनों की सफाई सुनिश्चित करता है।



3. कस्टम अपवाद: Exception वर्ग का विस्तार



वास्तविक परियोजनाओं में, शायद ही कभी मानक Exception वर्ग का उपयोग किया जाता है। विभिन्न प्रकार की त्रुटियों के लिए अपने स्वयं के अपवाद वर्ग बनाना अधिक सुविधाजनक है। यह कोड को अधिक पठनीय बनाता है और विशिष्ट स्थितियों को पकड़ना आसान बनाता है।



उदाहरण: मान्यता त्रुटियों और डेटाबेस त्रुटियों के लिए अपवाद बनाएँ।

<?phpclass ValidationException extends Exception {}class DatabaseException extends Exception {}

function validateUser($age) { if ($age < 0 || $age > 150) { throw new ValidationException('अमान्य आयु'); } return true;}

function connectToDatabase($dsn) { if (empty($dsn)) { throw new DatabaseException('DSN खाली नहीं हो सकता'); } // कनेक्शन का अनुकरण...}

try { validateUser(200);} catch (ValidationException $e) { echo 'मान्यता त्रुटि: ' . $e->getMessage();}

try { connectToDatabase('');} catch (DatabaseException $e) {

ब्लॉग

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