PHP 5 có mô hình ngoại lệ tương tự như những ngôn ngữ lập trình khác. Ngoại lệ có thẻ được ném (throw) và bắt (catch) trong PHP. Mã lệnh có thể được đặt trong khối try để thuận tiên cho việc phát hiện ngoại lệ. Mỗi khối try phải có ít nhật một khối catch hoặc finally. Đối tượng được ném ra phải là một thể hiện của lớp Exception hoặc lớp con của nó. Việc cố ném một đối sẽ không có kết quả trong PHP Fatal Error. catchKhối nhiều catch có thể được sử dụng để bắt các lớp ngoại lệ khác nhau. Ngoại lệ thông thường (khi không có ngoại lệ nào được ném từ khối try) sẽ tiếp tục sau khối catch cuối cùng được định nghĩa. Ngoại lệ cũng có thể được ném (hoặc ném lại) trong khối catch. Khi một ngoại lệ được ném thì mã lệnh phía sau trong khối đó sẽ không được thực thi, và PHP sẽ cố tìm khối catch đầu tiên phù hợp với ngoại lệ đó. Nếu ngoại lệ nào đó không bắt được thì PHP Fatal Error sẽ đưa ra thông điệp "Uncaught Exception ..." khi một bộ xửl ý được định nghĩa với phương thức set_exception_handler(). finallyTừ phiên bản PHP 5.5, một khối finally cũng có thể được đặt sau hoặc thay thế cho khối catch. Mã lệnh trong khối finally sẽ luôn luôn được thực thi sau khối try và catch, ngay cả khi ngoại lệ được ném hay không. Lưu ýCác hàm trong PHP chủ yếu sử dụng thông báo lỗi, chỉ những phần mở rộng hướng đối tượng hiện đại mới sử dụng ngoại lệ. Tuy nhiên thì các lỗi có thể được chuyển đơn giản sang ngoại lệ với ErrorException. Gợi ý Standard PHP Library (SPL) cung cấp một số lượng các ngoại lệ được xây dựng sẵn rất hữu ích. Ví dụVí dụ ném một ngoại lệ:
inverse(5) . "\n"; Đoạn mã trên sẽ in ra: 0.2 Caught exception: Division by zero. Hello World Ví dụ 2: Xử lý ngoại lệ với khối finally
inverse(5) . "\n"; Ví dụ trên sẽ in ra: 0.2 First finally. Caught exception: Division by zero. Second finally. Hello World Ví dụ 3: Ngoại lệ lồng
Test { Ví dụ trên sẽ in ra: string(4) "foo!" Xem thêmThừa kế ngoại lệ |