Ngoại lệ, lỗi và xử lý ngoại lệ là những nhiệm vụ rất quen thuộc đối với tất cả các thành viên lập trình. Bài viết này trình bày các vấn đề liên quan đến Exception trong PHP. PHP cung cấp các cơ chế giúp bắt lỗi, giám sát các lỗi và xử lý các lỗi có thể xảy ra khi thiết lập chương trình
Trong nhiều ứng dụng lớn, có thể mở rộng, trong các ứng dụng hướng đối tượng và các framework thì việc bắt các Exception trong quá trình phát triển là điều cực kỳ tốt
Xử lý ngoại lệ trong PHP – PHP Exceptions
Ngoại lệ [Exception] trong PHP là gì?
Bạn có thể hiểu nôm na ngoại lệ như sau. Trong chương trình lập trình, chúng ta sẽ tạo ra các đoạn mã, hàm, mảng mới mong muốn nó thực hiện bất kỳ hành động nào trong chương trình. Như vậy, tất cả các hành động có thể xảy ra mà khác với mong muốn thì nó chính là ngoại lệ [Ngoại lệ]
Và chúng ta sẽ không bao giờ muốn cho chương trình hoạt động của mình sai mong muốn phải không nào. Vì thế mà ta cần xử lý ngoại lệ để tránh những ngoại lệ làm hỏng chương trình
Trái ngược với hệ thống xử lý lỗi trong PHP, xử lý ngoại lệ là phương pháp đối tượng hướng đối tượng để xử lý lỗi, cung cấp biểu thức báo cáo lỗi linh hoạt và có kiểm soát viên tốt hơn
Các phương pháp xử lý ngoại lệ trong PHP
- Sử dụng thử, ném và bắt
- Tạo lớp ngoại lệ tùy chỉnh
- Xử lý nhiều ngoại lệ
- Ném lại một ngoại lệ
- Thiết lập trình xử lý ngoại lệ cao cấp
Xử lý ngoại lệ [Xử lý ngoại lệ] trong PHP
Sử dụng thử, ném và bắt
Ta sẽ có một số khái niệm cần lưu ý dưới đây
Try − Một hàm sử dụng một ngoại lệ nên nằm trong khối try. Nếu ngoại lệ không xảy ra [không được kích hoạt], mã sẽ tiếp tục như bình thường. Tuy nhiên, nếu ngoại lệ xảy ra [được kích hoạt] thì ngoại lệ đó sẽ bị “ném ra”
Throw − Đây là cách bạn kích hoạt một ngoại lệ. Mỗi "ném" phải có ít nhất một "bắt"
Catch − Mỗi khối “catch” bắt một ngoại lệ và tạo một đối tượng chứa thông tin của ngoại lệ đó
Tổng hợp các cú pháp của try catch
Ví dụ
Kết quả
Before try block Inside try block After catch [will be always executed] Before try block Inside try block Exception Caught: Number is zero. After catch [will be always executed]
Trong đó Hàm demo[] kiểm tra nếu một số có bằng 0 hoặc không. Nếu điều kiện ngoại lệ không chính xác được ném ra. Khối “bắt” lấy ngoại lệ và tạo ra một đối tượng [$e] chứa thông tin ngoại lệ. Thông báo lỗi từ ngoại lệ được lặp lại bằng cách gọi $e->getMessage[] từ đối tượng ngoại lệ
Trong ví dụ trên, hàm $e->getMessage[] được sử dụng để lấy thông báo lỗi. Không chỉ có mỗi một hàm đó, dưới đây là một số hàm có thể được sử dụng từ lớp ngoại lệ trong PHP
Thông báo lỗi Một số hàm lấy
- getMessage[] − notification of exception
- getCode[] − mã của ngoại lệ
- function getFile[] − tên tệp nguồn
- getLine[] − dòng nguồn
- getTrace[] − n array of backtrace[]
- function getTraceAsString[] − string was format of trace
- getClass[] – lớp có ngoại lệ
Từ ví dụ về try catch on ta có thể thêm vào như sau
Kết quả.
2Đầu tiên ta sẽ tạo một lớp có tên myException được kế thừa từ lớp Exception, như vậy, nó sẽ kế thừa tất cả các phương thức và thuộc tính từ lớp Exception
Trong lớp trên sẽ tạo một hàm get_message để thông báo lỗi nếu một số truyền vào bằng 0
Ra khỏi lớp, tạo một hàm demo[] với nội dung bên trong khi thực hiện, hãy thử bắt để kiểm tra xem số truyền vào có bằng 0 không. Nếu số bằng 0, một ngoại lệ sẽ bị ném và sau đó khối bắt sẽ bắt ngoại lệ về rồi hiển thị thông tin lỗi
Xử lý nhiều ngoại lệ – Multiple Exceptions
Nhiều ngoại lệ là cách sử dụng nhiều khối try…catch để cố gắng bắt các ngoại lệ bị ném ra
Ở phương pháp này, chúng ta có thể sử dụng các câu lệnh điều khiển như if…else, switch, hoặc các ngoại lệ lồng vào nhau
Cú pháp tổng thể
try { // Some code... } catch [ExceptionType1 | ExceptionType2 $e] { // Code to handle the exception } catch [\Exception $e] { // ... }
Ví dụ
________số 8Xử lý nhiều ngoại lệ sẽ hữu ích khi bạn muốn hiển thị thông báo hoặc thực hiện một hành động bất kỳ tùy thuộc vào mỗi ngoại lệ được ném ra
Thiết lập xử lý ngoại lệ cao cấp – Set Top Level Exception Handler
Hàm set_Exception_handler[] sẽ đặt tất cả hàm do người dùng đã xác định thành tất cả ngoại lệ chưa được lưu
Trong đoạn mã trên không có khối "bắt". Thay vào đó, quá 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 bắt
Kết quả
ví dụ khác
01Tham khảo
- https. //www. php. net/manual/vi/ngôn ngữ. ngoại lệ. php
- https. //www. chuyên viên máy tính. org/xử lý ngoại lệ-trong-php/
- https. // stackoverflow. com/câu hỏi/8439581/bắt-nhiều-ngoại lệ-loại-trong-một-bắt-khối/37522012
- https. //github. com/php/php-src/cam kết/0aed2cc2a440e7be17552cc669d71fdd24d1204a
end
Bài viết trên mình đã liệt kê một vài cách để xử lý các ngoại lệ trong chương trình PHP. Mỗi bài viết về kiến thức học PHP của mình đều có thể chưa hoàn chỉnh đầy đủ nên mong các bạn hãy tra google khi tham khảo và mong các bạn có thể gửi lại comment bổ sung bên dưới để mình có thể hoàn thiện lại bài viết . Cảm ơn các bạn
Nếu các bạn cảm thấy Website TanHongIT. Com thật sự hữu ích mình mong các bạn có thể share những bài viết để cộng đồng cùng thảo luận nhé. Cảm ơn các bạn
Các bạn có bất kỳ thắc mắc nào cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, học khóa,… thì cứ comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé. Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất