Xử lý lỗi và ngoại lệ được thực hiện như thế nào trong php?

Khi phiên bản PHP 5 được phát hành, nó đã tích hợp một mô hình tích hợp để bắt lỗi và ngoại lệ. Xử lý lỗi trong PHP với khối try catch gần giống như xử lý lỗi trong các ngôn ngữ lập trình khác

Khi ném một ngoại lệ PHP, bộ thực thi PHP sẽ tìm một câu lệnh bắt có thể xử lý loại ngoại lệ đó. Nó sẽ tiếp tục kiểm tra các phương thức gọi lên dấu vết ngăn xếp cho đến khi tìm thấy câu lệnh bắt. Nếu không tìm thấy, ngoại lệ sẽ được trao cho trình xử lý ngoại lệ toàn cầu mà chúng tôi cũng sẽ đề cập trong bài viết 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ã

Ví dụ thử bắt PHP đơn giản

Dưới đây là một ví dụ về câu lệnh thử bắt PHP cơ bản

try {
    // run your code here
}
catch [exception $e] {
    //code to handle the exception
}
finally {
    //optional code that always runs
}

Từ khóa xử lý lỗi PHP

Các từ khóa sau được sử dụng để xử lý ngoại lệ PHP

  • Cố gắng. Khối thử chứa mã có khả năng đưa ra một ngoại lệ. Tất cả mã trong khối thử được thực thi cho đến khi có khả năng xảy ra ngoại lệ
  • Ném. Từ khóa throw được sử dụng để báo hiệu sự xuất hiện của một ngoại lệ PHP. Sau đó, bộ thực thi PHP sẽ cố gắng tìm một câu lệnh bắt để xử lý ngoại lệ
  • Bắt lấy. Khối mã này sẽ chỉ được gọi nếu có ngoại lệ xảy ra trong khối mã thử. Mã trong câu lệnh bắt của bạn phải xử lý ngoại lệ đã được đưa ra
  • Cuối cùng. Trong PHP5. 5, tuyên bố cuối cùng được giới thiệu. Khối cuối cùng cũng có thể được chỉ định sau hoặc thay vì khối bắt. Mã trong khối cuối cùng sẽ luôn được thực thi sau khối thử và bắt, bất kể ngoại lệ đã được ném hay chưa và trước khi tiếp tục thực thi bình thường. Điều này hữu ích cho các tình huống như đóng kết nối cơ sở dữ liệu bất kể có xảy ra ngoại lệ hay không

PHP thử bắt với nhiều loại ngoại lệ

PHP hỗ trợ sử dụng nhiều khối bắt trong thử bắt. Điều này cho phép chúng tôi tùy chỉnh mã của mình dựa trên loại ngoại lệ đã được đưa ra. Điều này hữu ích để tùy chỉnh cách bạn hiển thị thông báo lỗi cho người dùng hoặc nếu bạn có khả năng thử lại điều gì đó không thành công lần đầu tiên

try {
    // run your code here
}
catch [Exception $e] {
    echo $e->getMessage[];
}
catch [InvalidArgumentException $e] {
    echo $e->getMessage[];
}

Khi nào nên sử dụng try catch-cuối cùng

Trong phiên bản PHP 5. 5, khối cuối cùng đã được thêm vào. Đôi khi trong mã xử lý lỗi PHP của bạn, bạn cũng sẽ muốn sử dụng phần cuối cùng. Cuối cùng không chỉ hữu ích cho việc xử lý ngoại lệ, nó được sử dụng để thực hiện mã dọn dẹp như đóng tệp, đóng kết nối cơ sở dữ liệu, v.v.

Khối cuối cùng luôn thực thi khi khối thử bắt thoát. Điều này đảm bảo rằng khối cuối cùng được thực thi ngay cả khi xảy ra ngoại lệ không mong muốn

Ví dụ về try catch-cuối cùng

try {
    print "this is our try block n";
    throw new Exception[];
} catch [Exception $e] {
    print "something went wrong, caught yah! n";
} finally {
    print "this part is always executed n";
}

Dưới đây là sơ đồ cho thấy chương trình hoạt động như thế nào

Tạo các loại ngoại lệ PHP tùy chỉnh

PHP cũng cho phép tạo các loại ngoại lệ tùy chỉnh. Điều này có thể hữu ích để tạo các ngoại lệ tùy chỉnh trong ứng dụng của bạn mà bạn có thể xử lý ngoại lệ đặc biệt xung quanh

Để tạo trình xử lý ngoại lệ tùy chỉnh, chúng ta phải tạo một lớp đặc biệt với các hàm có thể được gọi khi xảy ra ngoại lệ. Lớp phải là phần mở rộng của lớp ngoại lệ

class DivideByZeroException extends Exception {};

Lớp ngoại lệ tùy chỉnh kế thừa các thuộc tính từ lớp Ngoại lệ của PHP và bạn có thể thêm các chức năng tùy chỉnh vào nó. Bạn có thể không muốn hiển thị tất cả các chi tiết của một ngoại lệ cho người dùng hoặc bạn có thể hiển thị một thông báo thân thiện với người dùng và ghi thông báo lỗi nội bộ để theo dõi

Mẫu bên dưới sử dụng ngoại lệ PHP tùy chỉnh với nhiều câu lệnh bắt

class DivideByZeroException extends Exception {};
class DivideByNegativeException extends Exception {};

function process_divide[$denominator]
{
    try
    {
        if [$denominator == 0]
        {
            throw new DivideByZeroException[];
        }
        else if [$denominator < 0]
        {
            throw new DivideByNegativeException[];
        }
        else
        {
            echo 100 / $denominator;
        }
    }
    catch [DivideByZeroException $ex]
    {
        echo "Divide by zero exception!";
    }
    catch [DivideByNegativeException $ex]
    {
        echo "Divide by negative number exception!";
    }
    catch [Exception $x]
    {
        echo "UNKNOWN EXCEPTION!";
    }
}

Đoạn mã trên đưa ra một ngoại lệ và bắt nó bằng một lớp ngoại lệ tùy chỉnh. Các lớp DivideByZeroException[] và DivideByNegativeException[] được tạo dưới dạng phần mở rộng của lớp Ngoại lệ hiện có; . Khối “thử” được thực thi và một ngoại lệ được ném ra nếu mẫu số là số 0 hoặc số âm. Khối “catch” bắt ngoại lệ và hiển thị thông báo lỗi

Lưu đồ bên dưới tóm tắt cách hoạt động của mã mẫu ở trên đối với các loại ngoại lệ tùy chỉnh

Xử lý ngoại lệ PHP toàn cầu

Trong một thế giới hoàn hảo, mã của bạn sẽ xử lý ngoại lệ phù hợp. Cách tốt nhất là bạn cũng nên định cấu hình trình xử lý ngoại lệ PHP toàn cầu. Nó sẽ được gọi trong trường hợp xảy ra một ngoại lệ chưa được xử lý mà không được gọi trong khối thử bắt PHP thích hợp

Để định cấu hình trình xử lý ngoại lệ PHP toàn cầu, chúng tôi sẽ sử dụng hàm set_Exception_handler[] để đặt hàm do người dùng xác định để xử lý tất cả các ngoại lệ chưa được phát hiện

function our_global_exception_handler[$exception] {
    //this code should log the exception to disk and an error tracking system
    echo "Exception:" . $exception->getMessage[];
}

set_exception_handler[‘our_global_exception_handler’];

Cách ghi nhật ký ngoại lệ đúng cách trong PHP của bạn, hãy thử bắt các khối

Ghi nhật ký thường là tai mắt của hầu hết các nhà phát triển khi khắc phục sự cố ứng dụng. Ghi lại các ngoại lệ để bạn có thể tìm thấy chúng sau khi chúng xảy ra là một phần thực sự quan trọng trong các phương pháp hay nhất về xử lý lỗi PHP

Hãy dùng thử Prefix, trình lược tả mã miễn phí của Stackify, để viết mã tốt hơn trên máy trạm của bạn. Tiền tố hoạt động với. NET, Java, PHP, Nút. js, Ruby và Python

Nhật ký lỗi rất quan trọng trong quá trình phát triển vì nó cho phép nhà phát triển xem các cảnh báo, lỗi, thông báo, v.v. đã được ghi lại trong khi ứng dụng đang chạy. Để bạn có thể xử lý chúng một cách thích hợp thông qua các kỹ thuật xử lý ngoại lệ PHP try catch chúng ta vừa học

Tùy thuộc vào khung công tác PHP mà bạn đang sử dụng, cho dù là Laravel, Codeigniter, Symfony hay những người khác, họ có thể cung cấp các khung công tác ghi nhật ký tích hợp. Bạn cũng có thể sử dụng Monolog, một thư viện ghi nhật ký PHP tiêu chuẩn. Bất kể bạn đang sử dụng khung ghi nhật ký nào, bạn muốn luôn ghi nhật ký các ngoại lệ quan trọng được đưa vào mã của mình

Đây là một mẫu thử/bắt ghi lại lỗi với Monolog

require_once[DIR.'/vendor/autoload.php'];
use MonologLogger;
use MonologHandlerStreamHandler;

$logger = new Logger['channel-name'];
$logger->pushHandler[new StreamHandler[DIR.'/app.log', Logger::DEBUG]];

try {
    // Code does some stuff
    // debug logging statement
    $logger->info['This is a log! ^_^ '];
}
catch [Exception $ex] {
    $logger->error['Oh no an exception happened! '];
}

Cách sử dụng try catch với MySQL

Các thư viện PHP cho MySQL, PDO và mysqli, có các chế độ xử lý lỗi khác nhau. Nếu bạn không kích hoạt ngoại lệ cho các thư viện đó, bạn không thể sử dụng các khối thử bắt. Điều này làm cho việc xử lý lỗi trở nên khác biệt và có lẽ phức tạp hơn

PDO

Trong PDO, bạn phải bật ERRMODE_EXCEPTION khi tạo kết nối

// connect to MySQL
$conn = new PDO['mysql:host=localhost;dbname=stackifydb;charset=utf8mb4', 'username', 'password'];
//PDO error mode to exception
$conn->setAttribute[PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION];

Tìm hiểu thêm về các thuộc tính PDO từ tài liệu PHP

mysql

Đối với mysqli, bạn phải làm điều gì đó tương tự

________số 8_______

Tìm hiểu thêm từ tài liệu MySQL

Cách xem tất cả các ngoại lệ PHP ở một nơi

Xử lý ngoại lệ thích hợp trong PHP là rất quan trọng. Là một phần của điều đó, bạn không muốn chỉ ghi nhật ký ngoại lệ của mình vào tệp nhật ký và không bao giờ biết chúng đã xảy ra

Giải pháp là sử dụng giải pháp theo dõi lỗi như Stackify's Retrace. Tất cả các lỗi được ghi lại cùng với một số chi tiết quan trọng về lỗi đó, bao gồm thời gian xảy ra, phương pháp gây ra lỗi và loại ngoại lệ

Retrace cung cấp nhiều tính năng theo dõi và giám sát lỗi quan trọng. Bao gồm khả năng xem tất cả ngoại trừ ở một nơi, xác định các lỗi duy nhất, tìm nhanh các lỗi mới sau khi triển khai, thông báo qua email về các lỗi mới, v.v.

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

Tóm lược

Trong hướng dẫn này, chúng tôi đã chỉ ra cách sử dụng PHP try catch blocks. Chúng tôi cũng đề cập đến một số cách sử dụng nâng cao với nhiều loại ngoại lệ và thậm chí cả cách ghi nhật ký tất cả các lỗi của bạn vào thư viện ghi nhật ký. Các phương pháp hay nhất để xử lý lỗi tốt là rất quan trọng đối với bất kỳ ứng dụng PHP nào. Truy xuất có thể giúp bạn nhanh chóng tìm và khắc phục sự cố tất cả các ngoại lệ được đưa vào mã của bạn

Cách xử lý ngoại lệ được thực hiện trong PHP?

Thử, ném và bắt . Nếu ngoại lệ không kích hoạt, mã sẽ tiếp tục như bình thường. Tuy nhiên, nếu ngoại lệ kích hoạt, ngoại lệ sẽ bị "ném" ném - Đây là cách bạn kích hoạt ngoại lệ.

Ngoại lệ và lỗi trong PHP là gì?

Ngoại lệ là đố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 dữ liệu mà nó không thể sử dụng.

Xử lý ngoại lệ được thực hiện như thế nào?

Try-Catch là phương pháp xử lý ngoại lệ đơn giản nhất. Đặt mã bạn muốn chạy vào khối thử và bất kỳ ngoại lệ Java nào mà mã ném ra đều bị bắt bởi một hoặc nhiều khối bắt. Phương pháp này sẽ bắt bất kỳ loại ngoại lệ Java nào bị ném. Đây là cơ chế đơn giản nhất để xử lý ngoại lệ

Cơ chế nào PHP cung cấp để xử lý các lỗi thời gian chạy?

Xử lý ngoại lệ là một cơ chế mạnh mẽ của PHP, được sử dụng để xử lý lỗi thời gian chạy [lỗi thời gian chạy được gọi là ngoại lệ]. Vì vậy, dòng chảy bình thường của ứng dụng có thể được duy trì. Mục đích chính của việc sử dụng xử lý ngoại lệ là để duy trì hoạt động bình thường của ứng dụng.

Chủ Đề