Giới thiệu
Code trong block finally sẽ luôn được thực thi चाहे có exception trong try block hay không. Block này xuất hiện sau catch block hoặc thay cho catch block.
Catch và finally block
Trong ví dụ sau, cả catch và finally đều có. Nếu exception xảy ra trong try, code trong cả hai đều chạy. Nếu không có exception, chỉ finally chạy.
<?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";
}
// Tiếp tục thực thi
echo "Execution continues\n";
?>
Kết quả
Caught exception: Division by zero. This block is always executed Execution continues
Thay đổi try block để không có exception:
<?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";
?>
Kết quả
2 This block is always executed Execution continues
Chỉ có finally block (không catch)
Ví dụ sau có hai try block. Một trong chúng chỉ có finally block. Try block của nó gọi div function ném exception:
<?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";
?>
Kết quả
Caught exception: Division by zero. This block is always executed Execution continues