एक PHP Exception क्या है?
PHP exception, एक object है जो किसी error या PHP स्क्रिप्ट के unexpected behavior का वर्णन करता है, जिसे प्रोग्राम द्वारा स्वयं ही handle किया जा सकता है। मूल रूप से, एक exception, प्रोग्राम के normal flow को disrupt यानि बाधित करता है।
दूसरे शब्दों में कहे तो, किसी भी प्रोग्राम का एक unexpected परिणाम ही एक exception है, जिसे प्रोग्राम द्वारा स्वयं ही नियंत्रित किया जा सकता है।PHP Exceptions कई functions और classes द्वारा throw (थ्रो यानि फेंका) और catch(पकड़ा) जा सकता है।
यूज़र डिफ़ाइंड functions और classes भी exception थ्रो सकते हैं।
लेकिन यह एक error से अलग है क्योंकि एक exception को प्रोग्राम द्वारा स्वयं ही संभाला जा सकता है, जबकि एक error को प्रोग्राम द्वारा अपने आप से संभाला नहीं जा सकता है।
PHP में Exception Handling
Exception हैंडलिंग PHP का एक शक्तिशाली mechanism है, जिसका उपयोग runtime errors को संभालने के लिए किया जाता है। ताकि एप्लिकेशन के normal flow को बनाए रखा जा सके।
Exception हैंडलिंग का उपयोग करने का मुख्य उद्देश्य एप्लिकेशन के normal execution को बनाए रखना है।
Exception Handling की आवश्यकता क्यों है?
PHP एक शक्तिशाली mechanism प्रदान करता है जो है exception handling. यह runtime errors जैसे IOException, SQLException, ClassNotFoundException, और भी बहुत कुछ को handle करने की अनुमति देता है।
सभी प्रोग्रामिंग लैंग्वेज में exception handling लगभग एक जैसा ही है। specified error की स्थिति होने पर यह प्रोग्राम के normal flow को बदल देता है और इस स्थिति को exception के रूप में जाना जाता है। PHP इस उद्देश्य के लिए निम्नलिखित कीवर्ड प्रदान करता है:
- try - try ब्लॉक में वह कोड होता है जिसमें exception हो सकता है। जब कोड के रनटाइम के दौरान try ब्लॉक के अंदर एक exception होता है, तो इसे catch ब्लॉक में हल किया जाता है। try ब्लॉक के बाद catch या अंत में finally ब्लॉक होना चाहिए।
- catch - catch ब्लॉक में वह कोड होता है जो किसी specified exception फेंके जाने पर execute होता है। यह हमेशा एक try ब्लॉक के साथ प्रयोग किया जाता है।
- throw - यह एक exception को throw करने के लिए इस्तेमाल किया जाने वाला keyword है। throw statement यूजर द्वारा परिभाषित function या method को exception फेंकने की अनुमति देता है। जब कोई exception को thrown किया जाता है, तो उसके बाद वाले कोड को execute नहीं किया जाता हैं।
- finally - finally ब्लॉक में वह कोड होता है, जिसका उपयोग PHP में clean-up activity के लिए किया जाता है। मूल रूप से, यह प्रोग्राम के आवश्यक कोड को execute करता है।
एक Exception थ्रो करना
एक throw statement यूजर द्वारा परिभाषित function या method को exception throw करने की अनुमति देता है। जब कोई exception थ्रो किया जाता है, तो उसके बाद वाले कोड को execute नहीं किया जा सकता है।
यदि कोई exception नहीं पकड़ा जाता है, तो "Uncaught Exception" मैसेज के साथ एक fatal error उत्पन्न होती है।
निचे दिए गए एक example में हम exception को बिना catch किये उसे थ्रो करने की प्रयास करते है।
<?php
// यूजर द्वारा परिभाषित एक function, एक exception के साथ
function checkAge($age)
{
if ($age < 18) {
//throw an exception
throw new Exception("You are not eligible to vote.");
}
return true;
}
checkAge(17);
?>
Fatal error: Uncaught Exception: You are not eligible to vote. in
C:\xampp\htdocs\project\testcode\test.php:7
Stack trace: #0 C:\xampp\htdocs\project\testcode\test.php(11): checkAge(17)
#1 {main} thrown in C:\xampp\htdocs\project\testcode\test.php on line 7
try...catch Statement
ऊपर दिए गए उदाहरण में error से बचने के लिए, हम exceptions को catch और process को जारी रखने के लिए try...catch स्टेटमेंट का उपयोग कर सकते हैं।
try {
code जिसमे हम मान के चलते है की गलती हो सकता है
} catch(Exception $e) {
code जो तब चलता है जब कोई exception पकड़ा जाता है
}
<?php
function checkAge($age)
{
if ($age < 18) {
//throw an exception
throw new Exception("You are Not eligible to vote.");
}
return true;
}
try {
checkAge(13);
// यदि exception throws करता है, तो नीचे दिया गया text, display नहीं होगा
echo 'You are eligible to vote.';
}
//catch exception
catch (Exception $e) {
echo 'Exception Message: ' .$e->getMessage();
}
// Result: Exception Message: You are Not eligible to vote.
?>
उद्धारण को समझते हैं
1st : उपरोक्त उदाहरण में, हमने एक Exception डिफाइन कर दिया की अगर किसी की age 18 से कम हो तो exception थ्रो करे जो की है You are Not eligible to vote.
2nd : जैसा की हम ऊपर देख चुके है की अगर हमे error से बचना है तो try...catch
का इस्तेमाल करना पड़ेगा।
3rd : इसलिए हमने try...catch
का इस्तेमाल किया।
4th : जैसे की आप देख सकते है की try
block में हमने age को चेक किया checkAge(13)
. यदि दिया गया कंडीशन true होता तो try
ब्लाक में दिया गया कोड execute होता। लेकिन यहाँ पर कंडीशन false होती है और कोड execute नहीं होता है और कोड का फ्लो अगली लाइन पे चला जाता है जो की है catch
ब्लॉक।
5th : और यहाँ आने पर Exception
को $e
में स्टोर करता है और अगली लाइन में लिखा कोड के अनुसार प्रिंट करा देता है जो की है, Exception Message: You are Not eligible to vote.
<?php
function division($dividend, $divisor)
{
if ($divisor == 0) {
throw new Exception("Division by zero.");
}
return $dividend / $divisor;
}
try {
echo division(25, 0);
} catch (Exception $e) {
echo "Divisor cannot be zero.";
}
// Result: Divisor cannot be zero.
?>
उदाहरण 2 में हमने दो argument पास किया है $dividend
और $divisor
, और अब हमने एक कंडीशन लगा दिया की अगर $divisor = 0
होता है तो एक Exception थ्रो करे।
अब जैसे ही हम division फंक्शन को कॉल करते है arguments के साथ try ब्लॉक के अन्दर, तो try ब्लॉक के अन्दर का कोड execute नहीं होता है क्योंकि की हम जानते है की math के नियम के अनुसार $divisor
कभी भी 0 नहीं हो सकता है।
और इस तरह कोड का फ्लो try ब्लॉक से बाहर निकल कर अगले ब्लॉक यानि catch
ब्लॉक में चला जाता है और वहा का error कोड या मेसेज प्रिंट करा देता है।
Error से बचने का यह मतलब नहीं है कि दोबारा try ब्लॉक में जाकर उस कोड को सही किया जाए। बल्कि इसका यह मतलब है कि अगर error जनरेट हुआ है तो catch ब्लॉक के अन्दर लिखा error मैसेज डिस्प्ले करे और आगे बढ़ जाए।
catch ब्लॉक यह दर्शाता है कि किस प्रकार के exception को पकड़ा जाना चाहिए और उस variable का नाम जिसका उपयोग अपवाद तक पहुंचने के लिए किया जा सकता है। उपरोक्त उदाहरण में, अपवाद का प्रकार Exception है और variable का नाम $e है।
try...catch...finally Statement
try...catch...finally स्टेटमेंट का उपयोग अपवादों को पकड़ने के लिए किया जा सकता है। यह catch ब्लॉक के समान है, जिसका उपयोग अपवाद को संभालने के लिए किया जाता है। अंतर केवल इतना है कि finally ब्लॉक में लिखा कोड हमेशा executes होगा चाहे कोई अपवाद पकड़ा जाए या नहीं। finally ब्लॉक को catch ब्लॉक के बाद या उसके स्थान पर specified किया जा सकता है। यह हमेशा try और catch ब्लॉक के ठीक बाद executes होता है, चाहे कोई अपवाद थ्रो हो या नहीं।
try {
code जिसमे हम मान के चलते है की exception थ्रो हो सकता है
}catch(Exception $e) {
code जो तब चलता है जब कोई exception पकड़ा जाता है
}finally {
code जो हमेशा executes होगा चाहे कोई exception पकड़ा जाए या नहीं
}
<?php
function checkAge($age){
if ($age < 18) {
throw new Exception("You are Not eligible to vote.");
}
return true;
}
try {
checkAge(13);
echo 'You are eligible to vote.';
} catch (Exception $e) {
echo 'Exception Message: ' . $e->getMessage();
} finally {
echo "</br> Process complete.";
}
/* Result: Exception Message: You are Not eligible to vote.
Process complete.*/
?>
<?php
function checkAge($age){
if ($age < 18) {
throw new Exception("You are Not eligible to vote.");
}
return true;
}
try {
checkAge(20);
echo 'You are eligible to vote.';
} catch (Exception $e) {
echo 'Exception Message: ' . $e->getMessage();
} finally {
echo "</br> Process complete.";
}
/* Result: You are eligible to vote.
Process complete.*/
?>
PHP Exception Object
फंक्शन और मेथड द्वारा Exceptions का इस्तेमाल किया जाता है Errors और अप्रत्याशित व्यवहार के बारे में जानकारी भेजने के लिए।
PHP Exception Object सूची नीचे दी गई है:Method | Description |
---|---|
Exception() | The constructor of the Exception object |
getCode() | Returns the exception code |
getFile() | Returns the full path of the file in which the exception was thrown |
getMessage() | Returns a string describing why the exception was thrown |
getLine() | Returns the line number of the line of code which threw the exception |
getPrevious() | If this exception was triggered by another one, this method returns the previous exception. If not, then it returns null |
getTrace() | Returns an array with information about all of the functions that were running at the time the exception was thrown |
getTraceAsString() | Returns the same information as getTrace(), but in a string |