Ngoại lệ PHP
Ngoại lệ là gì?
Ngoại lệ là một đối tượng mô tả lỗi hoặc hành vi không mong muốn của tập lệnh PHP.
Các ngoại lệ được đưa ra bởi nhiều hàm và lớp PHP.
Các hàm và lớp do người dùng định nghĩa cũng có thể đưa ra các ngoại lệ.
Ngoại lệ là một cách hay để dừng một chức năng khi gặp phải dữ liệu mà nó không thể sử dụng.
Ném một ngoại lệ
Câu lệnh throw
cho phép một hàm hoặc phương thức do người dùng xác định ném một ngoại lệ. Khi một ngoại lệ được ném ra, đoạn mã theo sau nó sẽ không được thực thi.
Nếu không bắt được ngoại lệ, lỗi nghiêm trọng sẽ xảy ra với thông báo "Ngoại lệ chưa được bắt".
Hãy thử ném một ngoại lệ mà không bắt nó:
Ví dụ
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
Hãy tự mình thử »Kết quả sẽ trông giống như thế này:
Fatal error : Uncaught Exception : Division by zero in
C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4
Câu lệnh try...catch
Để tránh lỗi từ ví dụ trên, chúng ta có thể sử dụng câu lệnh try...catch
để bắt ngoại lệ và tiếp tục quá trình.
Cú pháp
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
}
Ví dụ
Hiển thị thông báo khi ném ngoại lệ:
<?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.";
}
?>
Hãy tự mình thử » Khối bắt cho biết loại ngoại lệ nào sẽ bị bắt và tên của biến có thể được sử dụng để truy cập ngoại lệ. Trong ví dụ trên, loại ngoại lệ là Exception
và tên biến là $e
.
Câu lệnh thử...bắt...cuối cùng
Câu try...catch...finally
có thể được sử dụng để bắt các ngoại lệ. Mã trong khối finally
sẽ luôn chạy bất kể ngoại lệ có bị bắt hay không. Nếu có finally
thì khối catch
là tùy chọn.
Cú pháp
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
}
Ví dụ
Hiển thị thông báo khi ném ngoại lệ và sau đó cho biết quá trình đã kết thúc:
<?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. ";
} finally {
echo "Process complete.";
}
?>
Hãy tự mình thử »Ví dụ
Xuất ra một chuỗi ngay cả khi không bắt được ngoại lệ:
<?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.";
}
?>
Hãy tự mình thử »Đối tượng ngoại lệ
Đối tượng ngoại lệ chứa thông tin về lỗi hoặc hành vi không mong muốn mà hàm gặp phải.
Cú pháp
new Exception(message, code, previous)
Giá trị tham số
Parameter | Description |
---|---|
message | Optional. A string describing why the exception was thrown |
code | Optional. An integer that can be used to easily distinguish this exception from others of the same type |
previous | Optional. If this exception was thrown in a catch block of another exception, it is recommended to pass that exception into this parameter |
phương pháp
Khi bắt một ngoại lệ, bảng sau đây hiển thị một số phương pháp có thể được sử dụng để lấy thông tin về ngoại lệ:
Method | Description |
---|---|
getMessage() | Returns a string describing why the exception was thrown |
getPrevious() | If this exception was triggered by another one, this method returns the previous exception. If not, then it returns null |
getCode() | Returns the exception code |
getFile() | Returns the full path of the file in which the exception was thrown |
getLine() | Returns the line number of the line of code which threw the exception |
Ví dụ
Thông tin đầu ra về một ngoại lệ đã được đưa 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";
}
?>
Hãy tự mình thử »Tham chiếu ngoại lệ hoàn chỉnh
Để có tài liệu tham khảo đầy đủ, hãy truy cập Tài liệu tham khảo ngoại lệ PHP hoàn chỉnh của chúng tôi.
Tài liệu tham khảo chứa các mô tả và ví dụ về tất cả các phương thức Ngoại lệ.