PHP set_error_handler()

Giới thiệu về set_error_handler()

Hàm set_error_handler() trong PHP cho phép bạn định nghĩa cách xử lý các lỗi xảy ra trong chương trình. Thay vì để PHP xử lý lỗi theo cách mặc định, bạn có thể chỉ định một hàm riêng để xử lý chúng.

Cú pháp

set_error_handler(callable $error_handler, int $error_types = E_ALL): ?callable

Tham số:

  • $error_handler: Hàm được gọi khi có lỗi xảy ra. Hàm này phải có ít nhất 2 tham số: mã lỗi và thông điệp lỗi.
  • $error_types: Loại lỗi mà bạn muốn xử lý. Mặc định là E_ALL, nghĩa là mọi loại lỗi.

Cách sử dụng

Dưới đây là ví dụ đơn giản về cách sử dụng set_error_handler():

function customErrorHandler($errno, $errstr) {
    echo "Lỗi [$errno]: $errstr";
}

// Thiết lập customErrorHandler cho lỗi
set_error_handler("customErrorHandler");

// Gây ra lỗi
echo $test; // Biến $test chưa được định nghĩa

Các loại lỗi

Các loại lỗi mà bạn có thể xử lý bao gồm:

  • E_ERROR
  • E_WARNING
  • E_PARSE
  • E_NOTICE
  • E_DEPRECATED
  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE
  • E_STRICT
  • E_RECOVERABLE_ERROR

Trả về giá trị

Hàm set_error_handler() trả về giá trị của hàm xử lý lỗi trước đó nếu nó đã được thiết lập, hoặc null nếu không có hàm nào được thiết lập.

Ví dụ nâng cao

Dưới đây là một ví dụ nâng cao mà trong đó chúng ta sẽ log lỗi vào một file:

function logError($errno, $errstr, $errfile, $errline) {
    $logMessage = "Lỗi [$errno]: $errstr trong $errfile ở dòng $errline" . PHP_EOL;
    file_put_contents('error_log.txt', $logMessage, FILE_APPEND);
}

// Thiết lập hàm xử lý lỗi
set_error_handler("logError");

// Gây ra lỗi
echo $undefinedVariable; // Biến chưa được định nghĩa

Khôi phục hàm xử lý lỗi mặc định

Nếu bạn muốn khôi phục hàm xử lý lỗi mặc định của PHP, bạn có thể gọi restore_error_handler():

restore_error_handler();

Kết luận

Hàm set_error_handler() rất hữu ích trong việc quản lý lỗi, cho phép bạn tùy chỉnh cách thức xử lý lỗi trong ứng dụng của mình, từ việc thông báo cho người dùng đến việc ghi log lỗi để dễ dàng kiểm tra và khắc phục sau này.