Tạo ngoại lệ tùy chỉnh
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 56 trên 68.
Dù lớp Exception tích hợp sẵn của PHP hoạt động tốt khi xử lý lỗi nói chung, việc tạo các lớp ngoại lệ tùy chỉnh giúp thông báo lỗi cụ thể và có ý nghĩa hơn nhiều. Ngoại lệ tùy chỉnh giúp bạn phân biệt các loại vấn đề khác nhau trong code và xử lý chúng phù hợp.
Để tạo ngoại lệ tùy chỉnh, bạn mở rộng lớp cơ sở Exception của PHP bằng từ khóa extends. Cách kế thừa này giúp ngoại lệ tùy chỉnh có đầy đủ chức năng của ngoại lệ tiêu chuẩn, đồng thời cho phép bạn thêm hành vi riêng hoặc chỉ đơn giản là đặt tên mô tả hơn.
<?php
class InvalidEmailException extends Exception {
// Lớp (class) này có thể để trống vì kế thừa (inheritance) mọi thứ từ Exception
}
// Bạn cũng có thể thêm thuộc tính (property) hoặc phương thức (method) tùy chỉnh
class CustomException extends Exception {
public function getCustomMessage() {
return "Custom error: " . $this->getMessage();
}
}
?>Sức mạnh của ngoại lệ tùy chỉnh nằm ở tên gọi mô tả rõ ràng và khả năng bắt các kiểu ngoại lệ cụ thể. Thay vì bắt ngoại lệ chung chung Exception, bạn có thể bắt InvalidEmailException, DatabaseConnectionException hoặc bất kỳ ngoại lệ tùy chỉnh nào khác mà bạn tạo. Nhờ vậy, bạn xử lý lỗi chính xác hơn và dễ bảo trì code hơn.
Thử thách
DễBạn sẽ nhận một đầu vào: một chuỗi biểu thị tên lớp ngoại lệ. Đầu vào này sẽ là một từ dùng làm tên cho lớp ngoại lệ tùy chỉnh của bạn (ví dụ: NegativeBalanceException hoặc InvalidUsernameException).
Đọc đầu vào và tạo một lớp ngoại lệ tùy chỉnh bằng tên đã cho. Lớp ngoại lệ tùy chỉnh của bạn cần kế thừa lớp cơ sở Exception của PHP. Sau khi tạo lớp, in ra "Custom exception created: ", theo sau là tên lớp bạn nhận được làm đầu vào.
Định dạng đầu vào: Một dòng chứa chuỗi biểu thị tên lớp ngoại lệ (ví dụ: InvalidAgeException)
Đầu ra mong đợi: Custom exception created: , theo sau là tên lớp ngoại lệ
Tự làm thử
<?php
// Đọc tên lớp ngoại lệ
$className = trim(fgets(STDIN));
// TODO: Viết code bên dưới để tạo lớp ngoại lệ tùy chỉnh
// In kết quả ra
echo "Custom exception created: " . $className;
?>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