Giới thiệu
Trước phiên bản 7, PHP parser báo lỗi phản ứng với các điều kiện khác nhau. Mỗi lỗi thuộc một loại định nghĩa sẵn. PHP 7 đã thay đổi cơ chế báo lỗi. Thay vì báo lỗi truyền thống, hầu hết lỗi giờ được báo bằng cách ném error exceptions.
Nếu error exceptions không được xử lý, fatal error sẽ được báo và xử lý như điều kiện lỗi truyền thống. Hệ thống phân cấp lỗi của PHP bắt đầu từ interface Throwable. Tất cả lỗi định nghĩa sẵn như ArithmeticError, AssertionError, CompileError và TypeError là các class implements Throwable interface. Exception trong PHP 7 cũng implements Throwable interface.
Interface Throwable đóng vai trò base cho bất kỳ object nào có thể ném qua câu lệnh throw, bao gồm object Error và Exception. Class do người dùng định nghĩa không thể implement Throwable trực tiếp. Thay vào đó, để khai báo user-defined exception class, nó phải extends class Exception.
Cơ chế xử lý ngoại lệ của PHP bao gồm câu lệnh throw, catch, try. Để ném exception object, dùng từ khóa throw. Exception ném được xử lý bởi catch block. Code PHP có khả năng bị exception được bao quanh bởi try block.
Một hoặc nhiều catch block có thể có để bắt các instance khác nhau của Exception class. Khi không có exception trong try block, thực thi bình thường tiếp tục sau catch block cuối. Tuy nhiên, khi exception được ném trong try block, thay vì câu lệnh tiếp theo thực thi, PHP tìm catch block khớp với kiểu exception. Nếu không có catch block phù hợp, PHP parser báo Fatal error với thông điệp Uncaught Exception.
Ta cũng có thể cung cấp block finally sau hoặc thay vì catch block. Code trong finally block luôn được thực thi, bất kể exception có xảy ra trong try block hay không.