Exception handling, xử lý ngoại lệ trong PHP, cho phép bạn quản lý và xử lý các tình huống ngoại lệ xảy ra trong chương trình. Những tình huống này có thể bao gồm lỗi, trạng thái không mong muốn hoặc các điều kiện đặc biệt khác có thể xảy ra trong quá trình thực thi chương trình. Exception handling là một phần quan trọng trong việc viết mã PHP chất lượng cao và đảm bảo tính tin cậy của ứng dụng. Hãy cùng Vietnix tìm hiểu thêm về chủ đề xử lý ngoại lệ trong PHP qua bài viết dưới đây.
Exception handling là gì?
Ngoại lệ (exception) là một kết quả chương trình không mong muốn, có thể được xử lý bởi chính chương trình đó. Cách xử lý ngoại lệ trong PHP gần giống với xử lý ngoại lệ trong tất cả các ngôn ngữ lập trình khác.
Mọi người cũng xem:
Lợi ích của việc xử lý ngoại lệ trong PHP
Những ưu điểm chính của xử lý ngoại lệ so với xử lý lỗi:
- Tách code xử lý lỗi khỏi code thông thường: Trong code xử lý lỗi truyền thống luôn có một block
if-else
để xử lý lỗi. Các điều kiện và code xử lý lỗi này dễ bị lẫn lộn nên không thể đọc được. Với code khốitry-catch
trở nên có thể đọc được. - Phân nhóm các loại lỗi: Trong PHP, cả các loại cơ bản và các đối tượng đều có thể được coi là ngoại lệ. Nó có thể tạo một hệ thống phân cấp các đối tượng ngoại lệ, nhóm các ngoại lệ trong không gian tên hoặc lớp và phân loại chúng theo loại.
Từ khóa – keyword
PHP cung cấp các từ khóa chuyên biệt sau đây cho mục đích này.
- try: Nó đại diện cho một block code trong đó các ngoại lệ có thể phát sinh.
- catch: Nó đại diện cho một block code sẽ được thực thi khi một ngoại lệ cụ thể được đưa ra.
- throw: Nó được sử dụng để ném một ngoại lệ. Nó cũng được sử dụng để liệt kê các ngoại lệ mà một hàm đưa ra nhưng không tự xử lý.
- finally: Nó được sử dụng thay cho block catch hoặc sau block catch, về cơ bản, nó được đặt cho hoạt động dọn dẹp trong code PHP.
Ví dụ minh hoạ
Quy trình của block try-catch
thông thường trong PHP:
<?php
// PHP Program to illustrate normal
// try catch block code
function demo($var) {
echo " Before try block";
try {
echo "\n Inside try block";
// If var is zero then only if will be executed
if($var == 0)
{
// If var is zero then only exception is thrown
throw new Exception('Number is zero.');
// This line will never be executed
echo "\n After throw (It will never be executed)";
}
}
// Catch block will be executed only
// When Exception has been thrown by try block
catch(Exception $e) {
echo "\n Exception Caught", $e->getMessage();
}
// This line will be executed whether
// Exception has been thrown or not
echo "\n After catch (will be always executed)";
}
// Exception will not be raised
demo(5);
// Exception will be raised here
demo(0);
?>
Output như sau:
Before try block
Inside try block
After catch (will be always executed)
Before try block
Inside try block
Exception CaughtNumber is zero.
After catch (will be always executed)
Quy trình của block try-catch
và block finally trong PHP:
<?php
// PHP Program to illustrate normal
// try catch block code
function demo($var) {
echo " Before try block";
try {
echo "\n Inside try block";
// If var is zerothen only if will be executed
if($var == 0) {
// If var is zero then only exception is thrown
throw new Exception('Number is zero.');
// This line will never be executed
echo "\n After throw it will never be executed";
}
}
// Catch block will be executed only
// When Exception has been thrown by try block
catch(Exception $e) {
echo "\n Exception Caught" . $e->getMessage();
}
finally {
echo "\n Here cleanup activity will be done";
}
// This line will be executed whether
// Exception has been thrown or not
echo "\n After catch it will be always executed";
}
// Exception will not be raised
demo(5);
// Exception will be raised here
demo(0);
?>
Output như sau:
Before try block
Inside try block
Here cleanup activity will be done
After catch (will be always executed)
Before try block
Inside try block
Exception CaughtNumber is zero.
Here cleanup activity will be done
After catch (will be always executed)
Sử dụng class Exception tùy chỉnh:
<?php
class myException extends Exception {
function get_Message() {
// Error message
$errorMsg = 'Error on line '.$this->getLine().
' in '.$this->getFile()
.$this->getMessage().' is number zero';
return $errorMsg;
}
}
function demo($a) {
try {
// Check if
if($a == 0) {
throw new myException($a);
}
}
catch (myException $e) {
// Display custom message
echo $e->get_Message();
}
}
// This will not generate any exception
demo(5);
// It will cause an exception
demo(0);
?>
Output sẽ trả về thông báo như sau:
Error on line 20 in /home/45ae8dc582d50df2790517e912980806.php0 is number zero
Đặt top level exception handler: dùng hàm set_exception_handler()
sẽ đặt tất cả các hàm do người dùng xác định thành tất cả các ngoại lệ chưa phát hiện.
<?php
// PHP Program to illustrate normal
// try catch block code
// Function for Uncaught Exception
function myException($exception) {
// Details of Uncaught Exception
echo "\nException: " . $exception->getMessage();
}
// Set Uncaught Exception handler
set_exception_handler('myException');
function demo($var) {
echo " Before try block";
try {
echo "\n Inside try block";
// If var is zero then only if will be executed
if($var == 0)
{
// If var is zero then only exception is thrown
throw new Exception('Number is zero.');
// This line will never be executed
echo "\n After throw (it will never be executed)";
}
}
// Catch block will be executed only
// When Exception has been thrown by try block
catch(Exception $e) {
echo "\n Exception Caught", $e->getMessage();
}
// This line will be executed whether
// Exception has been thrown or not
echo "\n After catch (will be always executed)";
if($var < 0) {
// Uncaught Exception
throw new Exception('Uncaught Exception occurred');
}
}
// Exception will not be raised
demo(5);
// Exception will be raised here
demo(0);
// Uncaught Exception
demo (-3);
?>
Output như sau:
Before try block
Inside try block
After catch (will be always executed)
Before try block
Inside try block
Exception CaughtNumber is zero.
After catch (will be always executed)
Before try block
Inside try block
After catch (will be always executed)
Exception: Uncaught Exception occurred
Lời kết
Vietnix hy vọng nội dung bài viết trên đã giúp bạn hiểu rõ hơn về các Exception handling – Xử lý ngoại lệ trong PHP. Ngoài ra, bạn cũng có thể tham khảo thêm các bài viết khác tại vietnix.vn để hiểu hơn về lập trình, chúc bạn thành công!