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 ném 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 tốt để dừng một hàm khi nó gặp phải dữ liệu mà nó không thể sử dụng.
Ném một Ngoại lệ
Câu throw
lệnh cho phép một hàm hoặc phương thức do người dùng định nghĩa ném ra một ngoại lệ. Khi một ngoại lệ được ném ra, mã theo sau nó sẽ không được thực thi.
Nếu một ngoại lệ không được bắt, một lỗi nghiêm trọng sẽ xảy ra với thông báo "Ngoại lệ chưa được giải quyết".
Hãy thử ném một ngoại lệ mà không bắt nó:
Thí dụ
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
Kết quả sẽ giống như sau:
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
Tuyên bố try ... catch
Để tránh lỗi từ ví dụ trên, chúng ta có thể sử dụng
try...catch
câu lệnh để bắt các 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
}
Thí dụ
Hiển thị thông báo khi một ngoại lệ được ném ra:
<?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.";
}
?>
Khối catch cho biết loại ngoại lệ nào nên được 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, kiểu ngoại lệ là Exception
và tên biến là $e
.
Tuyên bố thử ... bắt ... cuối cùng
Câu try...catch...finally
lệnh có thể được sử dụng để bắt các ngoại lệ. Mã trong
finally
khối sẽ luôn chạy bất kể có bắt được ngoại lệ hay không. Nếu
finally
có, catch
khối 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
}
Thí dụ
Hiển thị thông báo khi một ngoại lệ được đưa ra và sau đó cho biết rằng 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.";
}
?>
Thí dụ
Xuất 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.";
}
?>
Đố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 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 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 |
Thí dụ
Thông tin đầu ra về một ngoại lệ đã được ném:
<?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";
}
?>
Hoàn thành Tham chiếu Ngoại lệ
Để 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 .
Tham chiếu chứa các mô tả và ví dụ về tất cả các phương thức Ngoại lệ.