परिचय
जब try ब्लॉक या catch ब्लॉक (या दोनों) में return स्टेटमेंट होता है, तो finally ब्लॉक का एक विशिष्ट व्यवहार होता है। सामान्यतः return स्टेटमेंट प्रोग्राम के कंट्रोल को कॉलिंग पोजीशन पर वापस ले जाता है। हालांकि, try/catch ब्लॉक के साथ फंक्शन में return होने पर, finally ब्लॉक में स्टेटमेंट्स पहले निष्पादित होते हैं, फिर रिटर्न होता है।
उदाहरण
निम्न उदाहरण में, div() फंक्शन में try-catch-finally कंस्ट्रक्ट है। बिना एक्सेप्शन के try ब्लॉक डिवीजन का परिणाम लौटाता है। एक्सेप्शन के मामले में, catch ब्लॉक एरर मैसेज लौटाता है। हालांकि, किसी भी मामले में finally ब्लॉक में स्टेटमेंट पहले निष्पादित होता है।
<?php
function div($x, $y) {
try {
if ($y == 0) {
throw new Exception("Division by 0");
} else {
$res = $x / $y;
return $res;
}
}
catch (Exception $e) {
return $e->getMessage();
}
finally {
echo "This block is always executed\n";
}
}
$x = 10;
$y = 0;
echo div($x, $y);
?>
आउटपुट (y=0)
This block is always executed Division by 0
आउटपुट (y=5)
This block is always executed 2
महत्वपूर्ण निहितार्थ
- finally हमेशा चलता है - return, throw, या सामान्य निष्पादन के बावजूद।
- finally return को ओवरराइड कर सकता है - यदि finally में return है, तो वह try/catch के return को ओवरराइड करता है।
- क्लीनअप के लिए आदर्श - संसाधन मुक्त करना (फाइल क्लोज, DB डिसकनेक्ट, लॉक रिलीज)।
finally में return का उदाहरण (सावधानी)
<?php
function test() {
try {
return "from try";
} finally {
return "from finally"; // यह मान लौटाया जाएगा!
}
}
echo test(); // आउटपुट: from finally
?>
बेस्ट प्रैक्टिस
finally ब्लॉक में return स्टेटमेंट से बचें जब तक कि इरादतन try/catch के return मान को ओवरराइड न करना हो। finally का उपयोग केवल क्लीनअप के लिए करें।