Menu
CoddyTech

Khối finally

Thuộc phần Logic và luồng chương trình trong hành trình PHP của Coddy. Bài học 54 trên 68.

Đôi khi, bạn cần đoạn code vẫn chạy bất kể có xảy ra ngoại lệ hay không. Khối lệnh finally đảm bảo điều này: nó chứa code luôn chạy sau khi khối lệnh try...catch hoàn tất, rất phù hợp cho các thao tác dọn dẹp như đóng tệp hoặc kết nối cơ sở dữ liệu.

Khối finally chạy trong mọi trường hợp: khi khối try chạy thành công mà không có ngoại lệ, khi ngoại lệ được ném ra và bắt lại, và ngay cả khi ngoại lệ được ném ra nhưng không được bắt lại. Nhờ tính đáng tin cậy này, khối đó rất hữu ích để đảm bảo mã dọn dẹp quan trọng luôn chạy.

<?php
try {
    echo "Attempting operation...\n";
    // Đoạn code có thể gây ra ngoại lệ (exception)
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
} finally {
    echo "Cleanup completed.\n";
}
?>

Khối finally chạy sau khi cả khối try và catch kết thúc, tạo một vị trí nhất quán để đặt code dọn dẹp thiết yếu. Nhờ đó, script xử lý tài nguyên đúng cách và duy trì trạng thái sạch, bất kể điều gì xảy ra trong quá trình chạy.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận hai đầu vào: một loại phép toán và một số. Đầu vào thứ nhất là một chuỗi, có thể là "divide" hoặc "multiply". Đầu vào thứ hai là một số sẽ được dùng trong phép toán.

Đọc cả hai đầu vào và tạo một khối lệnh try...catch...finally. Bên trong khối lệnh try, hãy kiểm tra loại phép toán:

  • Nếu phép toán là "divide", hãy kiểm tra xem số đó có bằng không không. Nếu bằng không, hãy ném một Exception mới với thông báo "Cannot divide by zero". Nếu số đó khác không, hãy tính 100 chia cho số đó và in ra "Result: " theo sau là kết quả.
  • Nếu phép toán là "multiply", hãy tính 100 nhân với số đó và in ra "Result: " theo sau là kết quả.

Trong khối lệnh catch, hãy xử lý mọi ngoại lệ bằng cách in ra "Error: " theo sau là thông báo ngoại lệ bằng phương thức getMessage().

Trong khối lệnh finally, hãy in ra "Operation completed".

Định dạng đầu vào:

  • Dòng thứ nhất: Một chuỗi cho biết loại phép toán (là divide hoặc multiply)
  • Dòng thứ hai: Một số (ví dụ: 5, 0 hoặc 2.5)

Đầu ra mong đợi:

  • Nếu phép toán thành công: Result: theo sau là giá trị đã tính, rồi đến Operation completed trên một dòng mới
  • Nếu xảy ra phép chia cho không: Error: Cannot divide by zero, rồi đến Operation completed trên một dòng mới

Tự làm thử

<?php
// Đọc các đầu vào
$operation = trim(fgets(STDIN));
$number = floatval(fgets(STDIN));

// TODO: Viết code bên dưới
// Tạo khối lệnh try...catch...finally để xử lý phép toán

?>
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch PHP online