Hướng dẫn dùng try catch với session c năm 2024
Bài này hướng dẫn bạn xử lý ngoại lệ trong PHP. Các ngoại lệ được sử dụng để thay đổi luồng thông thường của tập lệnh nếu xảy ra lỗi được chỉ định. Show Nội dung chính Xử lý ngoại lệ được sử dụng để thay đổi luồng bình thường của chương trình nếu xảy ra một lỗi cụ thể (đặc biệt). Tình trạng này được gọi là ngoại lệ. Đây là những gì thường xảy ra khi một ngoại lệ được kích hoạt:
Các phương thức xử lý ngoại lệ trong PHP:
Lưu ý: Ngoại lệ chỉ nên được sử dụng với các điều kiện lỗi và không được sử dụng để nhảy đến một vị trí khác trong tập lệnh tại một điểm cụ thể. Sử dụng try, throw và catch
Ví dụ sử dụng khối try và throw nhưng không catch ngoại lệKhi một ngoại lệ được ném, khối lệnh sau nó sẽ không được thực thi, và PHP sẽ cố gắng tìm khối "catch" phù hợp. Nếu một ngoại lệ không bị bắt, một lỗi nghiêm trọng sẽ được đưa ra với một thông báo "Uncaught Exception". Hãy thử ném một ngoại lệ mà không bắt nó: 1) { }
return true;
}
//kích hoạt ngoại lệ
checkNum(2);
?>Kết quả: Fatal error: Uncaught Exception: Giá trị phải nhỏ hơn hoặc bằng 1. in C:\xampp\htdocs\php\vi-du-ngoai-le-1.php:5 Stack trace: 0 C:\xampp\htdocs\php\vi-du-ngoai-le-1.php(11): checkNum(2)1 {main} thrown in C:\xampp\htdocs\php\vi-du-ngoai-le-1.php on line 5Ví dụ sử dụng try, throw và catchĐể tránh lỗi từ ví dụ trên, chúng ta cần phải sử dụng đối tượng Exception thích hợp với khối catch để xử lý một ngoại lệ. 1) { }
return true;
}
//kích hoạt ngoại lệ trong khối "try"
try {
checkNum(2);
// nếu ngoại lệ được ném ra thì lệnh sau không được thực thi
echo 'Number nhỏ hơn hoặc bằng 1.';
}
//catch exception
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
?>Kết quả: Message: Giá trị phải nhỏ hơn hoặc bằng 1. Giải thích ví dụ: Đoạn mã trên ném một ngoại lệ và bắt nó:
Tạo một lớp ngoại lệ tùy chỉnhĐể tạo một trình xử lý ngoại lệ tùy chỉnh, bạn phải tạo một lớp đặc biệt với các hàm có thể được gọi khi một ngoại lệ xảy ra trong PHP. Lớp này phải được kế thừa lớp Exception. Lớp ngoại lệ tùy chỉnh kế thừa các thuộc tính từ lớp Exception của PHP và bạn có thể thêm các hàm tùy chỉnh vào nó. Ví dụ tạo lớp ngoại lệ tùy chỉnh:
}
}
catch (customException $e) {
//hiển thị message
echo $e->errorMessage();
}
?>Kết quả: Error on line 17 in C:\xampp\htdocs\php\vi-du-ngoai-le-3.php: [email protected] is not a valid E-Mail address Lớp mới là một bản sao của lớp Exception cũ với việc bổ sung hàm errorMessage(). Vì nó là một bản sao của lớp cũ, và nó kế thừa các thuộc tính và phương thức từ lớp cũ, chúng ta có thể sử dụng các phương thức lớp Exception như getLine() và getFile() và getMessage(). Giải thích ví dụ Đoạn code trên ném một ngoại lệ và bắt nó với một lớp ngoại lệ tùy chỉnh:
Xử lý nhiều ngoại lệCó thể cho một tập lệnh sử dụng nhiều ngoại lệ để kiểm tra nhiều điều kiện. Có thể sử dụng một số mệnh đề if..else, switch hoặc tổ hợp nhiều ngoại lệ. Những ngoại lệ này có thể sử dụng các lớp ngoại lệ khác nhau và trả về các thông báo lỗi khác nhau:
}
//kiểm tra tồn tại chuỗi "example" trong địa chỉ email
if(strpos($email, "example") !== FALSE) { }
}
catch (CustomException2 $e) {
echo $e->errorMessage();
}
catch(Exception $e) {
echo $e->getMessage();
}
?>Kết quả: [email protected] is an example e-mail. Giải thích ví dụ Đoạn mã trên kiểm tra hai điều kiện và ném một ngoại lệ nếu bất kỳ điều kiện nào không được đáp ứng:
Note: Nếu trường hợp ngoại lệ được ném ra khỏi lớp CustomException2 và không có khối catch CustomException2, chỉ có khối catch Exception, ngoại lệ sẽ được xử lý ở đó.
Ném lại một ngoại lệĐôi khi, khi một ngoại lệ được ném, bạn có thể muốn xử lý nó khác với cách tiêu chuẩn. Có thể ném một ngoại lệ lần thứ hai trong một khối "catch". Tập lệnh nên ẩn các lỗi hệ thống khỏi người dùng. Lỗi hệ thống có thể quan trọng đối với nhà lập trình nhưng không quan trọng với người dùng. Để giúp người dùng dễ dàng hơn, bạn có thể ném lại ngoại lệ bằng thông điệp thân thiện với người dùng:
}
catch(Exception $e) { }
}
catch (CustomException3 $e) {
//hiển thị message
echo $e->errorMessage();
}
?>Kết quả: [email protected] is not a valid E-Mail address. Giải thích ví dụ Đoạn mã trên kiểm tra xem địa chỉ email có chứa chuỗi "example" trong đó hay không, nếu có, ngoại lệ sẽ được ném lại:
Nếu ngoại lệ không bị bắt trong khối "try" hiện tại của nó, nó sẽ tìm kiếm một khối catch có "cấp độ cao hơn". Thiết lập trình xử lý ngoại lệ cao cấpHàm set_exception_handler() thiết lập một chức năng người dùng định nghĩa để xử lý tất cả các trường hợp ngoại lệ còn tự do: Fatal error: Uncaught Exception: Giá trị phải nhỏ hơn hoặc bằng 1. in C:\xampp\htdocs\php\vi-du-ngoai-le-1.php:5 Stack trace: 0 C:\xampp\htdocs\php\vi-du-ngoai-le-1.php(11): checkNum(2)1 {main} thrown in C:\xampp\htdocs\php\vi-du-ngoai-le-1.php on line 50 Kết quả: Fatal error: Uncaught Exception: Giá trị phải nhỏ hơn hoặc bằng 1. in C:\xampp\htdocs\php\vi-du-ngoai-le-1.php:5 Stack trace: 0 C:\xampp\htdocs\php\vi-du-ngoai-le-1.php(11): checkNum(2)1 {main} thrown in C:\xampp\htdocs\php\vi-du-ngoai-le-1.php on line 51 Trong đoạn mã trên không có khối "catch". Thay vào đó, trình xử lý ngoại lệ cấp cao nhất được kích hoạt. Hàm này nên được sử dụng để bắt các ngoại lệ chưa được catch. |