PHP try and catch là các khối có tính năng xử lý ngoại lệ, chứa mã xử lý ngoại lệ. Họ đóng một vai trò quan trọng trong việc xử lý ngoại lệ. Có một từ khóa quan trọng hơn được sử dụng với khối try-catch là ném. Ném là một từ khóa được sử dụng để ném một ngoại lệ
Mỗi khối thử phải có ít nhất một khối bắt. Mặt khác, một khối try cũng có thể có nhiều khối catch để xử lý các loại ngoại lệ khác nhau.
cú pháp
Cú pháp sau đây được sử dụng trong xử lý ngoại lệ để xử lý lỗi thời gian chạy -
Hãy cùng tìm hiểu về thử-ném-bắt chi tiết hơn
Khối thử chứa mã có thể chứa ngoại lệ. Một ngoại lệ được đưa ra trong khối thử trong thời gian chạy bị bắt bởi khối bắt. Do đó, mỗi khối thử phải có ít nhất một khối bắt. Nó bao gồm khối mã mà ngoại lệ có thể xảy ra
Những điểm sau đây cần được lưu ý về việc thử
- Khối thử phải được theo sau bởi khối bắt hoặc khối cuối cùng
- Một khối thử phải có ít nhất một khối bắt
- Có thể có nhiều khối bắt với một khối thử
Khối catch bắt ngoại lệ được đưa ra trong khối try. Nó chứa mã để bắt ngoại lệ, được ném bằng từ khóa ném trong khối thử. Khối catch thực thi khi ném một ngoại lệ cụ thể. PHP tìm khối catch phù hợp và gán đối tượng ngoại lệ cho một biến
Các điểm cần lưu ý sau đây về việc đánh bắt
- Có thể có nhiều hơn một khối bắt với một lần thử
- Ngoại lệ ném ra được bắt và giải quyết bằng một hoặc nhiều lần bắt
- Khối catch luôn được sử dụng với khối try. Nó không thể được sử dụng một mình
- Nó xuất hiện ngay sau khối thử
ném
Nó là một từ khóa, được sử dụng để ném một ngoại lệ. Lưu ý rằng một lần ném ít nhất có một "khối bắt" để bắt ngoại lệ
Nó liệt kê các ngoại lệ do chức năng đưa ra, mà chính chức năng đó không thể xử lý được
cuối cùng
Nó là một khối chứa mã thiết yếu của chương trình để thực thi. Khối cuối cùng cũng được sử dụng cho hoạt động dọn dẹp trong PHP. Nó tương tự như khối catch, dùng để xử lý ngoại lệ. Sự khác biệt duy nhất là nó luôn thực thi cho dù một ngoại lệ có được xử lý hay không
Khối cuối cùng có thể được chỉ định sau hoặc thay cho khối bắt. Nó luôn thực thi ngay sau khối try and catch cho dù có ném ngoại lệ hay không và trước khi khởi động lại quá trình thực thi bình thường. Nó hữu ích trong các trường hợp sau - Đóng kết nối cơ sở dữ liệu, luồng
ví dụ 1
Hãy lấy một ví dụ để giải thích quy trình phổ biến của ném và bắt thử cũng như chặn cuối cùng
đầu ra
Exception Message: Value must be less than 1 It is finally block, which always executes.
ví dụ 2
đầu ra
Trong kết quả bên dưới, bạn có thể thấy rằng khi một số lẻ được thông qua, một thông báo ngoại lệ sẽ được hiển thị. Mặt khác, khi một số chẵn được chuyển, một thông báo khác sẽ được hiển thị
Output for ODD Number Exception Message: Passed number is an ODD Number It is finally block, which always executes. Output for EVEN Number If you see this text, the passed value is an EVEN Number It is finally block, which always executes.
ví dụ 2. Ngoại lệ tùy chỉnh và nhiều câu lệnh bắt
Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp ngoại lệ tùy chỉnh mở rộng lớp Ngoại lệ. Ở đây, chúng tôi cũng sẽ sử dụng nhiều khối bắt với một khối thử
Trong PHP8. 1, hành vi xử lý lỗi mặc định của tiện ích mở rộng MySQLi đã thay đổi từ lỗi im lặng thành ném Ngoại lệ đối với lỗi
Trước PHP 8. 1, chế độ báo cáo lỗi mặc định trong MySQLi là tắt các lỗi và thường dẫn đến mã không tuân theo xử lý Ngoại lệ/Lỗi thích hợp. Từ PHP8. 1 trở lên, chế độ báo cáo lỗi mặc định là đưa ra Ngoại lệ đối với các lỗi
Chế độ lỗi mặc định của MySQLi được thay đổi từ
2 thành$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
0$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
- MYSQLI_REPORT_OFF
+ MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT
Thay đổi này tương tự như việc tiện ích mở rộng PDO thay đổi chế độ báo cáo lỗi thành Ngoại lệ trong PHP 8. 0
Trước PHP 8. 1, lỗi trong phần mở rộng, cơ sở dữ liệu, truy vấn hoặc kết nối cơ sở dữ liệu đã trả về
$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
1 và đưa ra cảnh báo PHP$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
Warning: mysqli::__construct[]: [HY000/2002]: No connection could be made because the target machine actively
refused it in .. on line ...
Từ PHP8. 1 trở lên, chế độ lỗi mặc định được đặt thành
$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
0$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
Fatal error: Uncaught mysqli_sql_exception: Connection refused in ...:...
Tác động tương thích ngược
Đây là một thay đổi lớn vì giá trị mặc định khác trong PHP 8. 1
Để tương thích trên các phiên bản PHP trước PHP 8. 1, có thể đặt chế độ xử lý lỗi một cách rõ ràng bằng hàm
$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
3 trước khi thực hiện kết nối MySQLi đầu tiên. Cũng có thể khởi tạo phiên bản $mysqli = new mysqli["localhost", "non-existing-user", "", ""];
4 và đặt giá trị báo cáo lỗiLưu ý rằng lớp
4 có mẫu đơn trạng thái, có nghĩa là khi giá trị báo cáo lỗi được đặt, nó sẽ ảnh hưởng đến tất cả các kết nối MySQLi trong suốt yêu cầu trừ khi giá trị này sau đó được ghi đè trong một lệnh gọi khác. Điều tương tự cũng áp dụng cho hàm$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
3$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
Định cấu hình PHP 8. 1 hành vi trong tất cả các phiên bản PHP
Output for ODD Number Exception Message: Passed number is an ODD Number It is finally block, which always executes. Output for EVEN Number If you see this text, the passed value is an EVEN Number It is finally block, which always executes.4
hoặc là
Output for ODD Number Exception Message: Passed number is an ODD Number It is finally block, which always executes. Output for EVEN Number If you see this text, the passed value is an EVEN Number It is finally block, which always executes.5
Cấu hình PHP db_link->error để nhận thông báo lỗi cuối cùng. Đối với tất cả các lỗi, hãy sử dụng $this->db_link->error_list.