Xử lý ngoại lệ hướng đối tượng trong PHP

Trong hướng dẫn trước, chúng tôi đã đề cập đến việc xử lý lỗi. Bây giờ câu hỏi đặt ra, sự khác biệt giữa Ngoại lệ và Lỗi là gì

Với PHP 5, một cách xử lý lỗi hướng đối tượng mới đã được giới thiệu, được gọi là Ngoại lệ

Xử lý ngoại lệ được sử dụng để xử lý lỗi và chuyển hướng quá trình thực thi mã khi nó xảy ra, không giống như lỗi khi quá trình thực thi mã dừng lại với thông báo lỗi hiển thị trên màn hình


Sử dụng khối try và catch

Mã có thể dẫn đến ngoại lệ hoặc lỗi được đặt trong khối try, nếu không có ngoại lệ xảy ra thì mã được thực thi bình thường trong trường hợp có ngoại lệ, việc thực thi mã sẽ thoát khỏi khối try và đi vào khối catch

Sau đây là cú pháp sử dụng trycatch để xử lý ngoại lệ,


2 Ngoại lệ

Chúng tôi có thể kích hoạt ngoại lệ theo cách thủ công nếu được yêu cầu bằng cách sử dụng từ khóa

2. 
4 là một lớp PHP là lớp cha cho tất cả các lớp ngoại lệ trong PHP

Để ném một ngoại lệ, chúng ta phải tạo một đối tượng của lớp ngoại lệ và sau đó sử dụng từ khóa

2 để kích hoạt ngoại lệ đó

Hãy lấy một ví dụ

Nếu chúng ta gọi hàm trên là

6 thì nó sẽ ném ra ngoại lệ

Bây giờ chúng ta có thể gọi hàm này từ bên trong khối try và xử lý ngoại lệ trong khối

8, như thế này

Ối. Đã xảy ra một số lỗi không mong muốn

Bên trong khối catch, chúng ta cũng có thể nhận được thông báo từ đối tượng ngoại lệ bằng cách sử dụng phương thức

0


Lớp ngoại lệ tùy chỉnh

Chúng ta có thể tạo lớp ngoại lệ tùy chỉnh bằng cách mở rộng lớp

4 do PHP cung cấp

Dưới đây chúng tôi có một ví dụ cho lớp ngoại lệ tùy chỉnh

Các lớp ngoại lệ tùy chỉnh rất hữu ích khi bạn có yêu cầu xử lý lỗi tùy chỉnh, ví dụ: lỗi ghi nhật ký trong cơ sở dữ liệu, v.v.


Xử lý nhiều ngoại lệ

Nếu một đoạn mã có thể đưa ra các loại ngoại lệ khác nhau và dựa trên loại ngoại lệ mà chúng tôi phải thực hiện một số hành động, thì trong tình huống như vậy, chúng tôi có thể có nhiều khối catch

Một vài điểm quan trọng cần nhớ khi xử lý nhiều ngoại lệ bằng cách sử dụng nhiều khối catch

Thông báo lỗi cú pháp trong PHP có thể so sánh với lỗi cú pháp trong các ngôn ngữ khác. Bất cứ ai có kiến ​​​​thức về ngôn ngữ này sẽ có thể theo dõi và sửa lỗi này

Mẹo. Tìm lỗi ứng dụng và các vấn đề về hiệu suất ngay lập tức với Stackify Retrace

Khắc phục sự cố và tối ưu hóa mã của bạn thật dễ dàng với các lỗi tích hợp, nhật ký và thông tin chi tiết về hiệu suất cấp mã

Xử lý ngoại lệ hướng đối tượng trong PHP
Xử lý ngoại lệ hướng đối tượng trong PHP

Hướng dẫn xử lý lỗi PHP

Trong bài viết này, bạn sẽ tìm hiểu về các loại lỗi khác nhau bao gồm nhật ký lỗi, xử lý lỗi, chức năng xử lý lỗi và xử lý lỗi khác trong khung PHP. Hãy bắt đầu bằng cách xác định sự khác biệt giữa các thuật ngữ “lỗi” và “ngoại lệ” và các thuật ngữ phổ biến khác trong PHP

Lỗi so với. ngoại lệ

Nhiều người sử dụng xử lý lỗi và xử lý ngoại lệ thay thế cho nhau. Khi chúng tôi nói xử lý lỗi, chúng tôi đang đề cập đến quá trình bắt lỗi do chương trình của bạn tạo ra, quá trình này cần có hành động thích hợp. Kể từ khi PHP ra đời cách xử lý lỗi theo hướng đối tượng (OOP) mới, nên việc xử lý ngoại lệ đã được giới thiệu. Nó được sử dụng để thay đổi cách thông thường xử lý việc thực thi mã của một tình trạng lỗi cụ thể khi nó xảy ra. Theo cách này, xử lý ngoại lệ cung cấp một kỹ thuật tốt hơn xử lý lỗi

Xử lý ngoại lệ trong PHP hoạt động như thế nào?

Cũng giống như bất kỳ chương trình hướng đối tượng nào khác, PHP cũng sử dụng các từ khóa sau liên quan đến ngoại lệ

Cố gắng. điều này có nghĩa là nếu ngoại lệ không kích hoạt, mã sẽ chỉ thực thi bình thường nhưng nếu ngoại lệ kích hoạt thì nó sẽ gọi ngoại lệ "thrown"

Ném. mỗi khi một ngoại lệ được kích hoạt, một ngoại lệ "ném" phải được ghép nối với ít nhất một "bắt"

Bắt lấy. khối mã này sẽ truy xuất một ngoại lệ và tạo một đối tượng bao gồm thông tin ngoại lệ

Nhật ký lỗi

Nhật ký lỗi rất quan trọng trong quá trình phát triển vì điều này cho phép nhà phát triển xem các lỗi, cảnh báo, thông báo, v.v. đã được ghi lại trong khi ứng dụng đang chạy. Hầu hết thời gian, khi một ứng dụng web được triển khai, tất cả các lỗi và cảnh báo đều bị chặn để ngăn người dùng thông thường nhìn thấy các lỗi sẽ phát sinh. Mặc dù các lỗi và cảnh báo bị ẩn khỏi người dùng thông thường, máy chủ web vẫn ghi lại mọi sự kiện mà trang web gặp phải

Xử lý lỗi đơn giản

Bất cứ khi nào ứng dụng ở trạng thái không chính xác mà không thể khôi phục, thì chương trình đang ở trạng thái lỗi

// Set MySQLi to throw exceptions
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
    $connection2 = mysqli_connect('localhost', 'root1', 'Abc123456!', 'testx');
} catch (mysqli_sql_exception $ex) {
    throw new Exception("Can't connect to the database! \n" . $ex);
}

Fatal error: Uncaught Exception: Can't connect to the database! mysqli_sql_exception: Access denied for user 'root1'@'localhost' to database 'testx'

Vì các tham số cho mysqli_connect không chính xác nên cách tốt nhất để xử lý loại tình huống này là chương trình đưa ra một ngoại lệ. Việc ứng dụng tiếp tục thực thi là vô nghĩa vì nó sẽ không trả về một số dữ liệu từ cơ sở dữ liệu

Sử dụng die() hoặc exit() để xử lý lỗi

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
    $connection2 = mysqli_connect('localhost', 'root1', 'Abc123456!', 'testx');
} catch (mysqli_sql_exception $ex) {
    die("Can't connect to the database! \n" . $ex);
}

Trong quá trình phát triển, việc sử dụng chức năng chết hoặc thoát để tạm dừng mã là một phong cách viết mã cho các nhà phát triển. Trong mã và thậm chí cả hướng dẫn, khi kết nối qua cơ sở dữ liệu, nếu kết nối không chính xác hoặc không hợp lệ, thì ứng dụng sẽ gọi một trong hai chức năng này để tạm dừng thực thi chương trình. Điều này rất hữu ích trong việc xử lý lỗi và theo dõi mã, nhưng khi ứng dụng được triển khai, điều này có thể khiến người dùng thông thường của ứng dụng web sợ hãi. Các lỗi như “Lỗi nghiêm trọng. Ngoại lệ chưa được phát hiện. Không thể kết nối với cơ sở dữ liệu. Mysqli_sql_Exception” không hữu ích cho người dùng cuối. Khi mã xử lý kết nối cơ sở dữ liệu sử dụng chết hoặc thoát, thì không có cách nào để chặn các thông báo lỗi này trên máy chủ web trực tiếp. Ngoại lệ, thông báo, v.v. có thể được ẩn chỉ bằng một cấu hình máy chủ web đơn giản hoặc mã PHP bổ sung, đó là lý do tại sao việc loại bỏ các ngoại lệ sẽ thực tế hơn trong việc xử lý các lỗi PHP

Truy xuất nhật ký lỗi

Xử lý ngoại lệ hướng đối tượng trong PHP

Trong Truy xuất, tất cả các lỗi được ghi lại cùng với một số thông tin quan trọng về lỗi đó như thời gian xảy ra, phương pháp gây ra lỗi và ngoại lệ mà lỗi đó tạo ra. Số lần xảy ra lỗi trong một khung thời gian cụ thể cũng được biểu thị. Từ dữ liệu này, các nhà phát triển có thể dễ dàng xem xét nguyên nhân gây ra lỗi và sau đó áp dụng cách khắc phục. Người quản lý dự án cũng có thể ưu tiên khắc phục vấn đề nào dựa trên số lần xuất hiện lỗi

Hàm xử lý lỗi PHP

function myTestFunctionHello($str)f
{
    echo "\nHi: $str";
    myTestFunctionGoodbye($str);
}

function myTestFunctionGoodbye($str)
{
    echo "\nGoodbye: $str";
    print_r(debug_backtrace());
}

myTestFunctionHello('World');

// output
{[0]=> array(4) { ["file"]=> string(43) "\var\www\test-error.php" ["line"]=> int(6) ["function"]=> string(21) "myTestFunctionGoodbye" ["args"]=> array(1)
{ [0]=> string(5) "World" }
}
[1]=> array(4){ ["file"]=> string(43) "\var\www\test-error.php" ["line"]=> int(15) ["function"]=> string(19) "myTestFunctionHello" ["args"]=> array(1)
{ [0]=> string(5) "World" }
}}

debug_backtrace cho phép các nhà phát triển xem chức năng nào được gọi đầu tiên. Về cơ bản, điều này sẽ trả về một mảng các lệnh gọi hàm, dòng, đối tượng, lớp, v.v. Điều này hữu ích trong việc theo dõi lỗi vì bất kỳ sửa chữa nào được thực hiện đều có thể ảnh hưởng đến các chức năng khác gọi hoặc sử dụng nó. Hàm tương tự, debug_print_backtrace, cũng cho kết quả tương tự nhưng chi tiết hơn

echo $unknown_a;
echo $unknown_b;
print_r(error_get_last());
Array ( [type] => 8 [message] => Undefined variable: unknown_b [file] => C:\xampp\htdocs\monolog-test\test-error.php 
=> 4 )

Hàm error_get_last sẽ nhận lỗi cuối cùng trong theo dõi ngăn xếp. Điều này có thể được sử dụng để loại bỏ tất cả các lỗi khác được hiển thị trong theo dõi ngăn xếp và chỉ tập trung vào lỗi cuối cùng đã xảy ra

// will log to the web server error log file, will also log to Retrace
error_log("This is a sample error.", 0);

// will email the error log
error_log("This is a sample error.", 1, "[email protected]");

// will log an error to a specified file
error_log("This is a sample error.", 3, "my-errors.log");

Hàm error_log cho phép nhà phát triển ghi nhật ký lỗi trong nhật ký lỗi mặc định của máy chủ web, gửi nhật ký lỗi tới email hoặc ghi nhật ký lỗi vào một tệp được chỉ định

$divisor = 0;
if ($divisor == 0) {
    trigger_error("Division of zero not allowed!", E_USER_ERROR);
}

Fatal error: Division of zero not allowed! in C:\xampp\htdocs\monolog-test\test-error.php on line 5

Điều này sẽ tạo ra lỗi do người dùng xác định, thông báo, cảnh báo, v.v. Hàm PHP này cho phép các nhà phát triển tạo một phản hồi được chỉ định khi chạy

Xử lý lỗi khung công tác PHP khác

Trong các khung công tác PHP khác, việc xử lý lỗi dễ dàng hơn rất nhiều và hầu hết chúng chỉ là vấn đề chỉnh sửa tệp cấu hình. Trong Laravel, lớp App\Exceptions\Handler xử lý tất cả các ngoại lệ được kích hoạt và ghi nhật ký bởi một ứng dụng web. Lớp Handler trong Laravel có 2 phương thức là report và render. Phương thức báo cáo được sử dụng để gửi ngoại lệ cho một dịch vụ bên ngoài. Báo cáo này phù hợp để ghi nhật ký lỗi mà không hiển thị trên trang web. Phương thức kết xuất sẽ chuyển đổi một ngoại lệ thành phản hồi HTTP cần được gửi lại cho trình duyệt

abort(500);
abort(403, 'You are not allowed to enter!');

Loại bỏ các ngoại lệ HTTP có thể dễ dàng được thực hiện trong Laravel bằng cách sử dụng trình trợ giúp hủy bỏ. Hàm trợ giúp hủy bỏ có tham số văn bản phản hồi tùy chọn cho thông báo hiển thị tùy chỉnh

Phần kết luận

Lỗi và khắc phục sự cố làm mất thời gian và đau đầu trong quá trình phát triển và thậm chí trong quá trình triển khai ứng dụng của bạn. Công cụ phù hợp để xử lý lỗi giúp cuộc sống của bạn dễ dàng hơn. Stackify kết hợp ghi nhật ký đối tượng gỡ lỗi với ghi nhật ký lỗi, có thể dễ dàng kiểm tra nguyên nhân gốc rễ của các ngoại lệ của bạn. Công cụ quản lý nhật ký và lỗi của Stackify có thể giúp bạn dễ dàng theo dõi và khắc phục sự cố ứng dụng của mình. Bạn có thể dùng thử miễn phí 14 ngày của chúng tôi ngay bây giờ

Làm cách nào để xử lý xử lý lỗi trong PHP?

Xử lý lỗi trong PHP rất đơn giản. Thông báo lỗi với tên tệp, số dòng và thông báo mô tả lỗi được gửi tới trình duyệt. .
Câu lệnh "die()" đơn giản
Lỗi tùy chỉnh và kích hoạt lỗi
Báo cáo lỗi

Làm cách nào để bắt tất cả các ngoại lệ trong PHP?

Bắt tất cả ngoại lệ PHP . cố gắng { //. }type-hinting the global exception object, which is indicated by adding a backslash in front: try { // .. }

Ngoại lệ PDO trong PHP là gì?

PDOException PHP là một ngoại lệ thời gian chạy xảy ra khi có sự cố xảy ra khi sử dụng lớp PDO (Đối tượng dữ liệu PHP) hoặc các phần mở rộng có liên quan của nó . Ví dụ: ngoại lệ này có thể xảy ra trong khi xử lý các kết nối hoặc truy vấn cơ sở dữ liệu.