Khối try...catch
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 53 trên 68.
Khi code PHP gặp sự cố có thể khiến chương trình bị dừng, bạn cần có cách xử lý tình huống này một cách êm thấm. Khối try...catch cung cấp cách xử lý ngoại lệ có cấu trúc. Ngoại lệ là những đối tượng lỗi đặc biệt, thể hiện các vấn đề nghiêm trọng trong code.
Khối lệnh try chứa code có thể thất bại hoặc phát sinh ngoại lệ. Nếu ngoại lệ xảy ra trong khối lệnh này, PHP sẽ dừng ngay việc thực thi phần code còn lại trong khối try và chuyển đến khối catch tương ứng. Khối catch xử lý ngoại lệ, giúp script của bạn tiếp tục chạy thay vì bị lỗi.
<?php
try {
// Đoạn code có thể phát sinh ngoại lệ (exception)
$result = riskyFunction();
echo "Success!";
} catch (Exception $e) {
// Xử lý ngoại lệ
echo "An error occurred: " . $e->getMessage();
}
?>Khối lệnh catch nhận một đối tượng Exception chứa thông tin về lỗi đã xảy ra. Bạn có thể truy cập thông báo lỗi bằng phương thức getMessage(). Cách này giúp toàn bộ tập lệnh không dừng lại khi xảy ra lỗi, nhờ đó bạn có thể kiểm soát cách xử lý lỗi và nội dung hiển thị cho người dùng.
Thử thách
DễBạn sẽ nhận một đầu vào: một số đại diện cho giá trị tuổi. Đầu vào có thể là số âm, không hợp lệ đối với tuổi.
Đọc đầu vào, chuyển đổi thành số nguyên, rồi tạo một khối lệnh try...catch. Bên trong khối lệnh try, kiểm tra xem tuổi có âm không. Nếu tuổi âm, hãy ném một ngoại lệ Exception mới với thông báo "Age cannot be negative". Nếu tuổi hợp lệ (bằng không hoặc là số dương), hãy in ra "Valid age: " theo sau là giá trị tuổi.
Trong khối lệnh catch, xử lý ngoại lệ bằng cách in ra "Error: " theo sau là thông báo ngoại lệ, sử dụng phương thức getMessage().
Định dạng đầu vào: Một dòng chứa số nguyên (ví dụ: 25 hoặc -5)
Đầu ra mong đợi:
- Nếu tuổi hợp lệ:
Valid age:theo sau là giá trị tuổi - Nếu tuổi âm:
Error: Age cannot be negative
Tự làm thử
<?php
// Đọc đầu vào
$age = intval(fgets(STDIN));
// TODO: Viết code bên dưới
// Tạo khối lệnh try...catch để kiểm tra tuổi
?>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
1Hàm nâng cao
Hàm ẩn danhClosure và 'use'Hàm mũi tênHàm callbackDùng 'call_user_func'Hàm biếnTruyền tham chiếuHàm đệ quyÔn tập: tổng hợp về hàm4Mảng đa chiều
Tạo mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuChỉnh sửa phần tử trong mảng 2 chiềuLặp qua các vòng lặp lồng nhauMảng kết hợp 2 chiềuÔn tập: bài tập lưới đơn giản2Thao tác nâng cao với mảng
Thêm phần tử bằng 'array_push'Xóa phần tử bằng 'array_pop'Thêm phần tử vào đầu mảng bằng 'array_unshift'Xóa phần tử đầu mảng bằng 'array_shift'Gộp các mảng được đánh chỉ sốGộp các mảng kết hợpTrích xuất phần tử bằng 'array_slice'Kiểm tra giá trị bằng 'in_array'Tìm khóa bằng 'array_search'Ôn tập: bài tập về danh sách phát5Sổ điểm học sinh
Thiết lập dự án: cấu trúc dữ liệuThêm học sinh mớiThêm điểm cho học sinhTính điểm trung bình của học sinhTìm học sinh có điểm cao nhấtTạo bảng điểm8Xử lý lỗi và ngoại lệ
Hiểu về lỗi trong PHPKhối try...catchKhối finallyNém ngoại lệTạo ngoại lệ tùy chỉnhSử dụng ngoại lệ tùy chỉnhÔn tập: Xác thực đầu vào3Sắp xếp mảng
Sắp xếp mảng có chỉ số tăng dầnSắp xếp mảng có chỉ số giảm dầnSắp xếp mảng kết hợp theo giá trịSắp xếp mảng kết hợp theo khóaSắp xếp theo thứ tự tự nhiênSắp xếp tùy chỉnh bằng 'usort'Ôn tập: Sắp xếp bảng xếp hạngTự luyện tập: Trình biên dịch PHP online