Giới thiệu
Có hành vi đặc biệt của block finally khi try block hoặc catch block (hoặc cả hai) chứa câu lệnh return. Thông thường return khiến điều khiển chương trình quay lại vị trí gọi. Tuy nhiên, trong hàm có try/catch với return, các câu lệnh trong finally block được thực thi trước khi return.
Ví dụ
Trong ví dụ sau, hàm div() có cấu trúc try-catch-finally. Try block không exception trả về kết quả chia. Trong trường hợp exception, catch block trả về thông báo lỗi. Tuy nhiên, trong cả hai trường hợp, câu lệnh trong finally block được thực thi trước.
<?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);
?>
Kết quả
This block is always executed Division by 0
Thay $y = 5. Kết quả:
This block is always executed 2