http://vietjack.com/php/index.jsp Copyright © vietjack.com Xử lý ngoại lệ lỗi (Error & Exception Handling) Xử lý lỗi tiến trình bắt lỗi tạo chương trình bạn sau thực hành động thích hợp bạn xử lý lỗi khơng xác, dẫn tới nhiều kết không mong đợi Trong PHP, đơn giản để xử lý lỗi Sử dụng hàm die() PHP Trong lập trình PHP, bạn nên kiểm tra tất điều kiện lỗi có trước tiếp tục thực hành động thích hợp cần thiết Bạn thử ví dụ sau mà khơng có /tmp/test.xt file với file Theo cách này, bạn viết code hiệu Sử dụng kỹ thuật trên, bạn dừng chương trình bạn xảy lỗi hiển thị thông báo thân thiện ý nghĩa tới người dùng http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/php/index.jsp Copyright © vietjack.com Tự định nghĩa hàm để xử lý lỗi PHP Bạn viết hàm riêng cho bạn để xử lý lỗi PHP cung cấp cho bạn framework để định nghĩa hàm xử lý lỗi Hàm phải có khả để thao thác hai tham số (error level error message), tới tham số (tùy ý: file, line-number, error context): Cú pháp error_function(error_level,error_message, error_file,error_line,error_context); Bảng chi tiết tham số trên: Tham số Miêu tả error_level Bắt buộc - Xác định cấp độ lỗi cho lỗi tự định nghĩa (user-defined) Phải giá trị số error_message Bắt buộc - Xác định error message lỗi tự định nghĩa error_file Tùy ý - Xác định tên file lỗi xảy error_line Tùy ý - Xác định số dòng lỗi xảy error_context Tùy ý - Xác định mảng chứa biến giá trị chúng, sử dụng lỗi xảy Cấp độ lỗi có PHP Những cấp độ lỗi kiểu lỗi khác Những giá trị sử dụng kết hợp sử dụng toán tử | Giá trị Hằng số Miêu tả E_ERROR Fatal run-time error Các lỗi nghiêm trọng việc thực http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/php/index.jsp Copyright © vietjack.com thi script bị dừng lại E_WARNING Non-fatal run-time error Các lỗi không nghiêm trọng việc thực thi script không bị dừng lại E_PARSE Compile-time parse error Lỗi parse thời gian biên dịch Các lỗi parse nên tạo parser E_NOTICE Run-time notice Script tìm thấy mà lỗi, xảy chạy script cách bình thường 16 E_CORE_ERROR Các Fatal error mà xuất cài đặt ban đầu PHP 32 E_CORE_WARNING Các non-fatal runtime error, xảy cài đặt ban đầu PHP 256 E_USER_ERROR Fatal error tạo người dùng Nó giống E_ERROR thiết lập lập trình viên sử dụng hàm trigger_error() PHP 512 E_USER_WARNING Non-Fatal error tạo người dùng Nó giống E_WARNING thiết lập lập trình viên sử dụng hàm trigger_error() PHP 1024 E_USER_NOTICE User-generated notice Nó giống E_NOTICE thiết lập lập trình viên sử dụng hàm trigger_error() PHP 2048 E_STRICT Run-time notice Kích hoạt để có thay đổi gợi ý từ PHP tới code bạn mà đảm bảo cho tính tương hợp code http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/php/index.jsp Copyright © vietjack.com 4096 E_RECOVERABLE_ERROR Fatal error bắt Giống E_ERROR bắt người dùng (tham khảo set_error_handler()) 8191 E_ALL Tất error warning, ngoại trừ E_STRICT (E_STRICT phận E_ALL PHP 6.0) Tất cấp độ lỗi thiết lập sử dụng hàm có sẵn PHP sau, với level giá trị định nghĩa bảng int error_reporting ( [int $level] ) Dưới cách bạn tạo hàm xử lý lỗi PHP: Khi bạn định nghĩa Error handler cho riêng bạn, bạn cần thiết lập sử dụng hàmset_error_handler có sẵn PHP Bây kiểm trả lại ví dụ việc gọi hàm mà không tồn Xử lý ngoại lệ (Exception Handling) PHP PHP có Exception Model tương tự ngơn ngữ lập trình khác Exception quan trọng cung cấp điều khiển tốt thông qua xử lý lỗi Dưới giải thích số từ khóa liên quan tới exception PHP: Try − Một hàm sử dụng exception nên khối try Nếu exception khơng kích hoạt, code tiếp tục bình thường Tuy nhiên, exception kích hoạt, exception “thrown” Throw − Đây cách bạn kích hoạt exception Mỗi “thrown” phải có “catch” Catch − Mỗi khối “catch” thu nhận exception tạo đối tượng chứa thông tin exception Khi exception ném, code theo sau lệnh khơng thực thi, PHP cố gắng tìm kiếm khối catch so khớp Nếu exception không bắt, Fatal Error (lỗi nghiêm trọng) PHP thông báo với “Uncaught Exception ” Một exception ném, bắt bên PHP Code bao quanh khối try Mỗi khối try phải có khối catch tương ứng Nhiều khối catch sử dụng để bắt lớp exception khác Các exception ném (hoặc ném lại) bên khối catch http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/php/index.jsp Copyright © vietjack.com Ví dụ Dưới đoạn code, bạn chép dán code vào file kiểm tra kết quả: Trong ví dụ trên, hàm $e->getMessage sử dụng để lấy error message Dưới số hàm sử dụng từ lớp Exception PHP getMessage() − thông báo exception getCode() − code exception getFile() − tên source file getLine() − source line getTrace() − n mảng backtrace() getTraceAsString() − chuỗi định dạng trace Tạo Custom Exception Handler PHP Bạn định nghĩa Exception Handler cho riêng bạn Bạn sử dụng hàm sau để thiết lập hàm xử lý ngoại lệ tự định nghĩa http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/php/index.jsp Copyright © vietjack.com string set_exception_handler ( callback $exception_handler ) Ở đây, exception_handler tên hàm để gọi uncaught exception xuất Hàm phải định nghĩa trước gọi hàm set_exception_handler() Ví dụ Bạn kiểm tra tập hợp hàm xử lý lỗi Hàm xử lý lỗi PHP http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... } //set error handler set _error_ handler("handleError"); //trigger error myFunction(); ?> Xử lý ngoại lệ (Exception Handling) PHP PHP có Exception Model tương tự ngôn ngữ lập trình khác Exception. ..http://vietjack.com /php/ index.jsp Copyright © vietjack.com Tự định nghĩa hàm để xử lý lỗi PHP Bạn viết hàm riêng cho bạn để xử lý lỗi PHP cung cấp cho bạn framework để định nghĩa hàm xử lý lỗi Hàm phải... thác hai tham số (error level error message), tới tham số (tùy ý: file, line-number, error context): Cú pháp error_ function (error_ level ,error_ message, error_ file ,error_ line ,error_ context); Bảng