Ngoại lệ là gì?
Lỗi là một kết quả chương trình không mong muốn mà chương trình không thể tự xử lý được.
Các lỗi được giải quyết bằng cách sửa chữa chương trình. Một ví dụ về lỗi sẽ là một vòng lặp vô hạn không bao giờ ngừng thực thi.
Một ngoại lệ là kết quả chương trình không mong muốn có thể được xử lý bởi chính chương trình.
Ví dụ về ngoại lệ bao gồm cố gắng mở một tệp không tồn tại.
Ngoại lệ này có thể được xử lý bằng cách tạo tệp hoặc hiển thị cho người dùng tùy chọn tìm kiếm tệp.
Trong hướng dẫn này, bạn sẽ học-
- Tại sao phải xử lý ngoại lệ?
- Xử lý lỗi PHP
- Ví dụ về xử lý lỗi
- Sự khác biệt giữa Lỗi và Ngoại lệ
- Nhiều trường hợp ngoại lệ
- Kiểm tra mã
Tại sao phải xử lý ngoại lệ?
- Tránh các kết quả không mong muốn trên các trang của chúng tôi có thể gây khó chịu hoặc khó chịu cho người dùng cuối của chúng tôi
- Cải thiện tính bảo mật của các ứng dụng của chúng tôi bằng cách không tiết lộ thông tin mà người dùng độc hại có thể sử dụng để tấn công các ứng dụng của chúng tôi
- Php Exceptions được sử dụng để thay đổi quy trình bình thường của chương trình nếu xảy ra bất kỳ lỗi nào có thể dự đoán được.
Xử lý lỗi PHP
Khi xảy ra lỗi, tùy thuộc vào cài đặt cấu hình của bạn, PHP sẽ hiển thị thông báo lỗi trong trình duyệt web với thông tin liên quan đến lỗi đã xảy ra.
PHP cung cấp một số cách để xử lý lỗi.
Chúng ta sẽ xem xét ba (3) phương pháp thường được sử dụng;
- Câu lệnh Die - hàm die kết hợp hàm vọng lại và hàm thoát trong một. Nó rất hữu ích khi chúng ta muốn xuất một thông báo và dừng việc thực thi tập lệnh khi xảy ra lỗi.
- Trình xử lý lỗi tùy chỉnh - đây là những chức năng do người dùng xác định được gọi bất cứ khi nào có lỗi xảy ra.
- Báo cáo lỗi PHP - thông báo lỗi tùy thuộc vào cài đặt báo cáo lỗi PHP của bạn. Phương pháp này rất hữu ích trong môi trường phát triển khi bạn không biết điều gì đã gây ra lỗi. Thông tin được hiển thị có thể giúp bạn gỡ lỗi ứng dụng của mình.
Ví dụ về xử lý lỗi
Bây giờ chúng ta hãy xem xét một số ví dụ đơn giản với các quy trình xử lý lỗi.
Giả sử rằng chúng tôi đã phát triển một ứng dụng sử dụng tệp văn bản để lưu trữ dữ liệu. Chúng tôi có thể muốn kiểm tra sự tồn tại của tệp trước khi chúng tôi cố gắng đọc dữ liệu từ nó.
Đoạn mã dưới đây thực hiện ví dụ trên.
Giả sử bạn đã lưu tệp simple_error.php trong thư mục phptuts, hãy mở URL http: //localhost/phptuts/simple_error.php
Bạn sẽ nhận được kết quả sau
Như bạn có thể thấy từ kết quả trên, nó làm cho ứng dụng của chúng ta trông không chuyên nghiệp và có thể gây khó chịu cho người dùng.
Chúng tôi sẽ sửa đổi đoạn mã trên và viết trình xử lý lỗi cho ứng dụng
Giả sử bạn đã lưu đoạn mã trên dưới dạng error_handling.php, hãy mở URL http: //localhost/phptuts/error_handling.php
Lưu ý: một phương pháp bảo mật tốt là hiển thị thông báo như hiển thị ở trên thay vì hiển thị thông báo như “Không tìm thấy tệp”.
Hãy xem một ví dụ khác sử dụng trình xử lý lỗi tùy chỉnh.
Trình xử lý lỗi tùy chỉnh sẽ được đặt làm chức năng xử lý lỗi PHP mặc định và về cơ bản sẽ hiển thị số lỗi và thông báo.
Đoạn mã dưới đây minh họa việc triển khai ví dụ trên
Mở URL http: //localhost/phptuts/custom_error_handler.php bạn sẽ nhận được kết quả sau
.
Như bạn có thể thấy từ ví dụ trên, trình xử lý lỗi tùy chỉnh rất mạnh mẽ theo nghĩa
- Chúng cho phép chúng tôi tùy chỉnh các thông báo lỗi.
- Trình xử lý lỗi tùy chỉnh cũng có thể bao gồm lỗi đăng nhập tệp / cơ sở dữ liệu, gửi email cho nhà phát triển, v.v.
Bây giờ chúng ta hãy xem xét loại xử lý lỗi thứ ba. Chúng ta sẽ sử dụng hàm error_reporting được tích hợp sẵn trong PHP. Nó có cú pháp cơ bản sau
ĐÂY,
- “Error_reporting” là chức năng báo cáo lỗi PHP
- “$ Report_level” là tùy chọn, có thể được sử dụng để đặt mức báo cáo. Nếu không có mức báo cáo nào được chỉ định, PHP sẽ sử dụng mức báo cáo lỗi mặc định như được chỉ định trong tệp php.ini.
Mức báo cáo | Sự miêu tả | Thí dụ |
---|---|---|
E_WARNING | Chỉ hiển thị thông báo cảnh báo. Không tạm dừng việc thực thi tập lệnh | báo cáo lỗi (E_WARNING); |
E_NOTICE | Hiển thị các thông báo có thể xảy ra trong quá trình thực thi bình thường của chương trình hoặc có thể là lỗi. | báo cáo lỗi (E_ NOTICE); |
E_USER_ERROR | Hiển thị lỗi do người dùng tạo, tức là trình xử lý lỗi tùy chỉnh | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Hiển thị thông báo cảnh báo do người dùng tạo | báo cáo lỗi (E_USER_WARNING); |
E_USER_NOTICE | Hiển thị thông báo do người dùng tạo | báo cáo lỗi (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Hiển thị lỗi không nghiêm trọng và có thể được xử lý bằng trình xử lý lỗi tùy chỉnh | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Hiển thị tất cả các lỗi và cảnh báo | error_reporting (E_ ALL); |
Sự khác biệt giữa Lỗi và Ngoại lệ
- Các trường hợp ngoại lệ được ném ra và dự định sẽ bị bắt trong khi lỗi thường không thể khôi phục được.
-
Các ngoại lệ được xử lý theo cách hướng đối tượng.
Điều này có nghĩa là khi một ngoại lệ được ném ra; một đối tượng ngoại lệ được tạo có chứa các chi tiết ngoại lệ.
Bảng bên dưới hiển thị các phương thức đối tượng ngoại lệ
phương pháp | Sự miêu tả | Thí dụ |
---|---|---|
getMessage () | Hiển thị thông báo của ngoại lệ |
getMessage();?> |
nhận được mã() | Hiển thị mã số đại diện cho ngoại lệ |
getCode();?> |
có được file() | Hiển thị tên tệp và đường dẫn nơi xảy ra ngoại lệ |
getFile();?> |
theo hàng() | Hiển thị số dòng nơi xảy ra ngoại lệ |
getLine();?> |
getTrace () | Hiển thị một mảng backtrace trước ngoại lệ |
getTrace());?> |
getPrevious () | Hiển thị ngoại lệ trước đó trước ngoại lệ hiện tại |
getPrevious();?> |
getTraceAsString () | Hiển thị dấu lùi của ngoại lệ dưới dạng một chuỗi thay vì một mảng |
getTraceAsString();?> |
__toString () | Hiển thị toàn bộ ngoại lệ dưới dạng một chuỗi |
__toString();?> |
Dưới đây là cú pháp cơ bản để ném một ngoại lệ.
ĐÂY,
- "Ném" là từ khóa được sử dụng để ném ngoại lệ
- “New Exception (…)” tạo một đối tượng ngoại lệ và chuyển chuỗi “Đây là một ví dụ ngoại lệ” làm tham số thông báo.
Đoạn mã trên xuất ra thông báo sau.
Bây giờ chúng ta sẽ xem xét một ví dụ thực hiện các ngoại lệ ném và bắt.
Chúng tôi sẽ sửa đổi ví dụ trên và bao gồm thử, ném và bắt.
Nó có cú pháp cơ bản sau.
ĐÂY,
- “Try {…}” là khối mã được thực thi có khả năng tạo ra một ngoại lệ
- “Catch (Exception $ e) {…}” là khối mã bắt ngoại lệ được ném ra và gán đối tượng ngoại lệ cho biến $ e.
Đoạn mã dưới đây hiển thị ví dụ ngoại lệ cơ bản với việc triển khai ngoại lệ thử, ném và bắt.
Chương trình cố tình ném một ngoại lệ mà sau đó nó bắt được.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Mở URL http: //localhost/phptuts/exception_handling.php Bạn sẽ nhận được kết quả sau.
Cũng có thể tạo nhiều ngoại lệ cho một câu lệnh thử php tùy thuộc vào loại ngoại lệ được đưa ra.
Xem bài viết về MySQL, truy cập dữ liệu PHP
… Đối với các ví dụ triển khai về nhiều trường hợp ngoại lệNhiều trường hợp ngoại lệ
Nhiều ngoại lệ sử dụng nhiều khối try catch để xử lý các ngoại lệ được ném ra. Nhiều ngoại lệ hữu ích khi;
- Bạn muốn hiển thị một thông báo tùy chỉnh tùy thuộc vào ngoại lệ được đưa ra
- Bạn muốn thực hiện một thao tác duy nhất tùy thuộc vào ngoại lệ được đưa ra
Lưu đồ bên dưới minh họa cách hoạt động của nhiều ngoại lệ
Hãy xem một ví dụ sử dụng nhiều ngoại lệ.
Chúng tôi sẽ sửa đổi mã chia một số cho số được chuyển vào trong mẫu số.
Chúng tôi mong đợi có hai loại ngoại lệ xảy ra;
- Chia cho số không
- Chia cho một số âm
Vì mục đích đơn giản, chúng tôi sẽ chỉ hiển thị loại ngoại lệ trong các khối bắt của chúng tôi.
PHP được xây dựng trong lớp Exception được sử dụng để ném các ngoại lệ.
Chúng tôi sẽ tạo hai lớp mở rộng lớp ngoại lệ và sử dụng chúng để ném ngoại lệ.
Đoạn mã dưới đây cho thấy việc triển khai.
Kiểm tra mã
Chúng tôi sẽ giả sử bạn đã lưu multiple_exceptions.php trong thư mục phptuts.
Duyệt đến URL http: //localhost/phptuts/multiple_exceptions.php
Chuyển trở lại tệp PHP và chuyển -1 làm tham số như trong sơ đồ sau.
Duyệt đến URL http: //localhost/phptuts/multiple_exceptions.php .
Bạn nhận được kết quả gì? Truyền 3 làm tham số.
Bạn nhận được kết quả gì?
Tóm lược
- Lỗi là kết quả không mong muốn do mã PHP tạo ra
- Xử lý lỗi cải thiện hiệu suất ứng dụng
- PHP đã tích hợp sẵn các hàm có thể được sử dụng để tùy chỉnh cách PHP báo lỗi
- Các ngoại lệ giống như lỗi, nhưng chúng có thể bị bắt bằng khối bắt khi ném.
- Hiển thị thông báo lỗi hiển thị thông tin lỗi được coi là một phương pháp bảo mật không tốt.