Lỗi và ngoại lệ trong PHP - Tìm hiểu về lỗi và ngoại lệ trong PHP
19/06/2021 02:04
Việc xử lý lỗi và ngoại lệ trong PHP là một phần quan trọng. Nếu code của bạn thiếu đi bước giải quyết lỗi và ngoại lệ, chương trình của bạn sẽ không chuyên nghiệp và dễ dàng gặp rủi ro và bảo mật. Trong bài viết dưới đây, chúng ta sẽ cùng tìm hiểu cách xử lý lỗi và ngoại lệ trong PHP.
Xử lý lỗi và ngoại lệ trong PHP
Lỗi trong PHP là gì?
Xử lý lỗi là quá trình bắt lỗi do chương trình của bạn đưa ra và sau đó thực hiện các hành động phù hợp để giải quyết lỗi này. Nếu bạn xử lý sai cách thì có thể dẫn đến nhiều hậu quả khó lường. Trong PHP, việc xử lý lỗi cũng tương đối đơn giản. Bạn có thể sử dụng một số phương pháp được liệt kê dưới đây để xử lý lỗi trong PHP.
Xử lý lỗi là quá trình bắt lỗi và sau đó thực hiện các hành động phù hợp để giải quyết lỗi
Sử dụng hàm die()
Trong khi viết chương trình PHP, bạn nên kiểm tra tất cả các tình trạng lỗi có thể xảy ra trước khi tiếp tục và thực hiện hành động thích hợp khi được yêu cầu.
Hãy thử ví dụ sau mà không có tệp /tmp/test.xt và với tệp này.
<?php
if(!file_exists("/tmp/test.txt")) {
die("File not found");
}else {
$file = fopen("/tmp/test.txt","r");
print "Opend file sucessfully";
}
// Test of the code here.
?>
Bằng cách này, bạn có thể viết một mã hiệu quả. Sử dụng kỹ thuật trên, bạn có thể dừng chương trình của mình bất cứ khi nào nó xảy ra lỗi và hiển thị thông báo có ý nghĩa và thân thiện hơn với người dùng.
Xác định chức năng xử lý lỗi tùy chỉnh
Bạn có thể viết hàm của riêng mình để xử lý bất kỳ lỗi nào. PHP cung cấp cho bạn một khuôn khổ để xác định chức năng xử lý lỗi.
Hàm này phải có thể xử lý tối thiểu hai tham số (mức lỗi và thông báo lỗi) nhưng có thể chấp nhận tối đa năm tham số (tùy chọn: tệp, số dòng và ngữ cảnh lỗi).
>>> Đọc thêm: Interface và Abstract trong PHP - So sánh khái niệm Interface và Abstract
Cú pháp lỗi trong PHP
error_function(error_level,error_message, error_file,error_line,error_context);
Số |
Mô tả về Thông số |
1 |
error_level Bắt buộc - Chỉ định mức báo cáo lỗi cho lỗi do người dùng xác định. Phải là một số có giá trị. |
2 |
error_message Bắt buộc - Chỉ định thông báo lỗi cho lỗi do người dùng xác định |
3 |
error_file Tùy chọn - Chỉ định tên tệp đã xảy ra lỗi |
4 |
error_line Tùy chọn - Chỉ định số dòng xảy ra lỗi |
5 |
error_context Tùy chọn - Chỉ định một mảng chứa mọi biến và giá trị của chúng được sử dụng khi lỗi xảy ra |
Mức độ lỗi có thể xảy ra trong PHP
Các mức báo cáo lỗi này là các loại lỗi khác nhau mà trình xử lý lỗi do người dùng xác định có thể được sử dụng. Các giá trị này được sử dụng kết hợp bằng cách sử dụng toán tử |.
STT |
Mô tả |
1 |
.E_ERROR Lỗi run - time nghiêm trọng. Việc thực thi tập lệnh bị tạm dừng |
2 |
E_WARNING Lỗi run-time không nghiêm trọng. Việc thực thi tập lệnh không bị tạm dừng |
3 |
E_PARSE Lỗi phân tích cú pháp thời gian biên dịch. Lỗi phân tích cú pháp chỉ được tạo bởi trình phân tích cú pháp. |
4 |
E_NOTICE Thông báo thời gian chạy. Tập lệnh đã tìm thấy điều gì đó có thể là lỗi nhưng cũng có thể xảy ra khi chạy tập lệnh bình thường |
5 |
E_CORE_ERROR Các lỗi nghiêm trọng xảy ra trong quá trình khởi động ban đầu của PHP. |
6 |
E_CORE_WARNING Lỗi run-time không nghiêm trọng. Điều này xảy ra trong quá trình khởi động ban đầu của PHP. |
7 |
E_USER_ERROR Lỗi nghiêm trọng do người dùng tạo. Điều này giống như một E_ERROR do lập trình viên thiết lập bằng cách sử dụng hàm trigger_error () trong PHP |
8 |
E_USER_WARNING Cảnh báo không nghiêm trọng do người dùng tạo. Đây giống như một E_WARNING do lập trình viên thiết lập bằng cách sử dụng hàm trigger_error () trong PHP |
9 |
E_USER_NOTICE Thông báo do người dùng tạo. Điều này giống như một E_NOTICE do lập trình viên thiết lập bằng cách sử dụng hàm trigger_error () trong PHP |
10 |
E_STRICT Thông báo thời gian chạy. Cho phép để PHP đề xuất các thay đổi đối với mã của bạn, điều này sẽ đảm bảo khả năng tương tác tốt nhất và khả năng tương thích chuyển tiếp của mã của bạn. |
11 |
E_RECOVERABLE_ERROR Lỗi nghiêm trọng có thể bắt được. Điều này giống như một E_ERROR nhưng có thể bị bắt bởi một xử lý do người dùng xác định (xem thêm set_error_handler ()) |
12 |
E_ALL Tất cả các lỗi và cảnh báo, ngoại trừ cấp E_STRICT (E_STRICT sẽ là một phần của E_ALL kể từ PHP 6.0) |
Cách tạo một hàm xử lý lỗi
<?php
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
?>
Sau khi bạn xác định trình xử lý lỗi tùy chỉnh của mình, bạn cần đặt nó bằng cách sử dụng hàm set_error_handler của thư viện tích hợp sẵn trong PHP . Bây giờ chúng ta hãy kiểm tra ví dụ của chúng ta bằng cách gọi một hàm không tồn tại.
<?php
error_reporting( E_ERROR );
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
//set error handler
set_error_handler("handleError");
//trigger error
myFunction();
?>
Xử lý ngoại lệ trong Python
PHP 5 có một mô hình ngoại lệ tương tự như mô hình của các ngôn ngữ lập trình khác. Các ngoại lệ rất quan trọng và giúp kiểm soát tốt hơn việc xử lý lỗi trong PHP.
Dưới đây là một số từ khóa mới liên quan đến các trường hợp ngoại lệ.
- Try - Một hàm sử dụng ngoại lệ phải nằm trong khối "try". Nếu ngoại lệ không kích hoạt, mã sẽ tiếp tục như bình thường. Tuy nhiên, nếu ngoại lệ kích hoạt, một ngoại lệ sẽ được "throw".
- Throw - Đây là cách bạn kích hoạt một ngoại lệ. Mỗi lần "throw" phải có ít nhất một lần "catch".
- Catch - Một khối "catch" lấy một ngoại lệ và tạo một đối tượng chứa thông tin ngoại lệ.
Khi một ngoại lệ được ném ra, mã theo sau câu lệnh sẽ không được thực thi và PHP sẽ cố gắng tìm khối catch phù hợp đầu tiên. Nếu một ngoại lệ không được bắt gặp, một Lỗi Fatal PHP sẽ được đưa ra với thông báo "Uncaught Exception” ...
- Một ngoại lệ có thể được ném và bị bắt ("catch") trong PHP. Mã có thể được bao quanh trong một khối thử.
- Mỗi lần thử phải có ít nhất một khối bắt tương ứng. Nhiều khối bắt có thể được sử dụng để bắt các lớp ngoại lệ khác nhau.
- Các ngoại lệ có thể được ném (hoặc ném lại) trong một khối bắt.
Ví dụ:
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
// Code following an exception is not executed.
echo 'Never executed';
}catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
?>
Trong ví dụ trên $ e-> hàm getMessage được sử dụng để nhận thông báo lỗi. Có các hàm sau có thể được sử dụng từ lớp Exception .
- getMessage () - thông báo ngoại lệ
- getCode () - mã ngoại lệ
- getFile () - tên tệp nguồn
- getLine () - dòng nguồn
- getTrace () - n mảng của backtrace ()
- getTraceAsString () - chuỗi theo dõi đã định dạng
>>> Đọc thêm: Filter trong PHP - Giải mã thông tin về Filter trong PHP
Tạo tình xử lý ngoại lệ tùy chỉnh trong PHP
Bạn có thể xác định trình xử lý ngoại lệ tùy chỉnh của riêng mình. Sử dụng hàm sau để đặt một hàm xử lý ngoại lệ do người dùng xác định.
string set_exception_handler ( callback $exception_handler )
Ở đây exception_handler là tên của hàm sẽ được gọi khi một ngoại lệ không có giá trị xảy ra. Hàm này phải được định nghĩa trước khi gọi set_exception_handler ().
Kết luận: Trên đây là các kiến thức căn bản về lỗi và ngoại lệ trong PHP. Việc hiểu rõ lỗi và ngoại lệ trong lập trình với PHP là một việc cần thiết mà bất kỳ lập trình viên nào cũng nên tìm hiểu. Hy vọng những kiến thức trên đây có thể giúp ích cho các bạn trong quá trình làm việc với PHP. Cùng tìm hiểu về PHP và các ngôn ngữ lập trình khác qua các khóa học lập trình tại Viện công nghệ thông tin T3H.