परिचय
finally ब्लॉक में कोड हमेशा निष्पादित होगा चाहे try ब्लॉक में एक्सेप्शन हो या नहीं। यह ब्लॉक catch ब्लॉक के बाद या catch ब्लॉक के बजाय प्रकट होता है।
catch और finally ब्लॉक दोनों
निम्न उदाहरण में, दोनों catch और finally ब्लॉक्स दिए गए हैं। यदि try ब्लॉक में एक्सेप्शन होता है, तो दोनों में कोड निष्पादित होता है। यदि कोई एक्सेप्शन नहीं है, तो केवल finally ब्लॉक निष्पादित होता है।
उदाहरण 1: एक्सेप्शन के साथ
<?php
function div($x, $y) {
if (!$y) {
throw new Exception('Division by zero.');
}
return $x / $y;
}
try {
echo div(10, 0) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} finally {
echo "This block is always executed\n";
}
// निष्पादन जारी रखें
echo "Execution continues\n";
?>
आउटपुट
Caught exception: Division by zero. This block is always executed Execution continues
उदाहरण 2: बिना एक्सेप्शन के
<?php
function div($x, $y) {
if (!$y) {
throw new Exception('Division by zero.');
}
return $x / $y;
}
try {
echo div(10, 5) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} finally {
echo "This block is always executed\n";
}
echo "Execution continues\n";
?>
आउटपुट
2 This block is always executed Execution continues
केवल finally ब्लॉक (catch के बिना)
निम्न उदाहरण में दो try ब्लॉक्स हैं। उनमें से एक में केवल finally ब्लॉक है। इसका try ब्लॉक div फंक्शन कॉल करता है जो एक एक्सेप्शन फेंकता है।
<?php
function div($x, $y) {
try {
if (!$y) {
throw new Exception('Division by zero.');
}
return $x / $y;
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
try {
echo div(10, 0) . "\n";
} finally {
echo "This block is always executed\n";
}
echo "Execution continues\n";
?>
आउटपुट
Caught exception: Division by zero. This block is always executed Execution continues
finally के उपयोग के मामले
- फाइल हैंडल्स बंद करना:
fclose($handle) - डेटाबेस कनेक्शन बंद करना:
$pdo = null - लॉक रिलीज करना:
$lock->release() - अस्थायी फाइलें हटाना
- लॉगिंग/ऑडिटिंग
निष्पादन क्रम
- try ब्लॉक निष्पादित होता है
- यदि एक्सेप्शन: matching catch ब्लॉक निष्पादित होता है
- finally ब्लॉक निष्पादित होता है (हमेशा)
- catch/finally के बाद का कोड जारी रहता है (यदि कोई अनकॉट एक्सेप्शन नहीं)