Trait là gì? Cách sử dụng Trait trong PHP
Trong bài này, chúng ta sẽ tìm hiểu về Trait trong PHP. Để học tốt bài...
Kết quả sẽ mở trong tab mới, giới hạn trong website này.
Truy cập nhanh
Tìm kiếm gần đây
Trong bài này, chúng ta sẽ tìm hiểu về ngoại lệ (exception) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP. 1. Exception trong PHP là gì? Trong PHP, ngoại lệ […]
Trong bài này, chúng ta sẽ tìm hiểu về ngoại lệ (exception) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
Trong PHP, ngoại lệ (exception) là một đối tượng (object) mô tả một lỗi (error) hoặc một vấn đề bất thường của PHP script. Exception có thể được xử lý bằng cách ném (throw) và bắt (catch) trong PHP. Nếu một exception xảy ra mà không được xử lý thì sẽ gây ra Fatal Error trong PHP.
Câu lệnh throw cho phép chúng ta ném ra một exception. Khi một exception được ném ra thì các đoạn code sau nó sẽ không được thực thi. Nếu không bắt exception thì Fatal Error sẽ xảy ra với thông báo “Uncaught Exception“.
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
Fatal error: Uncaught Exception: Division by zeroChúng ta cần phải bắt (catch) các exception có thể xảy ra để tránh lỗi và không bị dừng chương trình. Trong PHP, câu lệnh try…catch giúp chúng ta catch các exception. Cú pháp:
try {
//code that can throw exceptions
} catch(Exception $e) {
//code that runs when an exception is caught
}
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "Unable to divide.";
}
?>
Unable to divide.Câu lệnh try...catch...finally cũng có thể được sử dụng để catch các exception. Cú pháp:
<?php
try {
//code that can throw exceptions
} catch(Exception $e) {
//code that runs when an exception is caught
} finally {
//code that always runs regardless of whether an exception was caught
}
?>
Các dòng code trong khối lệnh finally luôn luôn được thực thi mặc dù có xảy ra exception hay không. Nếu có khối lệnh finally thì khối lệnh catch có thể có hoặc không.
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "Unable to divide. <br>";
} finally {
echo "Process complete.";
}
?>
Unable to divide.
Process complete.
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo "Process complete.";
}
?>
Process complete.
Fatal error: Uncaught Exception: Division by zero
Lưu ý: Có thể không sử dụng catch khi có finally. Nhưng nên sử dụng catch để bắt exception để tránh Fatal Error.
Những exception được ném ra đều là một object của lớp Exception. Các đối tượng của lớp Exception chứa các thông tin về error xảy ra. Cú pháp tạo một object Exception:
new Exception($message, $code, $previous)Trong đó,
| Phương thức | Chức năng |
| getMessage() | Trả về một string mô tả tại sao exception được ném ra |
| getPrevious() | Nếu ngoại lệ này ném ra từ một ngoại lệ khác thì hàm này sẽ trả về exception khác đó. Nếu không thì trả về null |
| getCode() | Trả về mã (code) là một số integer của exception |
| getFile() | Trả về đường dẫn của file mà exception được ném ra |
| getLine() | Trả về số dòng mà exception được ném ra |
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero", 1);
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $ex) {
$code = $ex->getCode();
$message = $ex->getMessage();
$file = $ex->getFile();
$line = $ex->getLine();
echo "Exception thrown in $file on line $line: [Code $code]
$message";
}
?>
Exception thrown in C:\xampp\htdocs\gochocit\index.php on line 4: [Code 1] Division by zeroTham khảo: PHP Exceptions w3schools.com, Exceptions php.net