Codeigniter: thử bắt không hoạt động

Lỗi là dữ liệu không mong muốn do chương trình máy tính tạo ra mà chương trình máy tính không thể xử lý. Xử lý lỗi PHP là một kỹ thuật một bước để phát hiện tất cả các lỗi do chương trình máy tính chính của bạn tạo ra và thực hiện hành động phù hợp

Xử lý lỗi trong PHP với các khối try-catch tương tự như xử lý lỗi trong các ngôn ngữ lập trình khác. Bộ thực thi PHP tìm kiếm một câu lệnh bắt có thể xử lý một ngoại lệ PHP khi nó được ném ra. Nó sẽ tiếp tục kiểm tra các phương thức gọi trong suốt quá trình theo dõi ngăn xếp cho đến khi tìm thấy câu lệnh bắt

Khi bạn đọc, bạn sẽ tìm hiểu thêm về Xử lý ngoại lệ PHP

#1 Xử lý ngoại lệ là gì?

Xử lý ngoại lệ là quá trình tạo điều kiện cho các lỗi và phản hồi chúng theo chương trình, dẫn đến việc thực thi một chuỗi mã thay thế, nhưng đã được lên kế hoạch trước đó. Nó có thể được tìm thấy ở nhiều nơi, bao gồm phần mềm, phần cứng và hệ thống điện, chẳng hạn như bo mạch chủ của máy tính của bạn

Đầu vào biểu mẫu không hợp lệ, logic lập trình sai, lỗi mạng, sự cố tương thích phần mềm, truy cập trái phép và thiếu bộ nhớ, trong số những thứ khác, có thể gây ra sự cố ở phía phần mềm

Xử lý ngoại lệ giúp nhà phát triển gỡ lỗi và người dùng nắm bắt tốt hơn nhu cầu của ứng dụng bằng cách giải quyết xung đột thông qua thông báo lỗi. Thực hành ngoại lệ tốt bảo vệ người dùng khỏi trải nghiệm người dùng xấu đồng thời hỗ trợ nhà phát triển xác định lỗi xảy ra với ứng dụng

PHP, giống như nhiều ngôn ngữ lập trình khác, chứa một số ngoại lệ tích hợp như ArgumentCountError, ArithmeticError, DivisionByZeroError, CompileError, ParseError và TypeError. Mặt khác, các hệ thống xử lý ngoại lệ có thể được sử dụng để tạo ra các ràng buộc dành riêng cho vấn đề. Nếu các yêu cầu không được tuân theo, chúng sẽ dẫn đến các ngoại lệ có thể được xử lý bằng lập trình

#2 Xử lý ngoại lệ PHP

Khi xảy ra lỗi, PHP sẽ hiển thị thông báo lỗi trong trình duyệt web với thông tin về lỗi đã xảy ra, tùy thuộc vào cài đặt cấu hình của bạn

Lỗi có thể được xử lý theo nhiều cách khác nhau trong PHP. Chúng ta sẽ xem xét ba cách thường được sử dụng

  1. Câu lệnh die
    Hàm echo và exit được kết hợp trong hàm die. Khi chúng ta muốn đưa ra thông báo và dừng thực thi script khi xảy ra lỗi, nó khá tiện dụng.
  2. Trình xử lý lỗi tùy chỉnh
    Khi xảy ra lỗi, đây là các hàm do người dùng xác định được gọi.
  3. Báo cáo lỗi PHP
    Tùy thuộc vào cài đặt báo cáo lỗi PHP của bạn, thông báo lỗi sẽ khác nhau. Khi bạn không biết nguyên nhân gây ra lỗi, giải pháp này rất hữu ích trong môi trường phát triển. Dữ liệu được cung cấp có thể hỗ trợ bạn gỡ lỗi ứng dụng của mình.

#3 Từ khóa xử lý ngoại lệ PHP

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

Try – Mã có khả năng ném ngoại lệ được chứa trong khối try. Cho đến khi một ngoại lệ được đưa ra, mã trong khối thử được thực hiện toàn bộ

Ném – Từ khóa ném được sử dụng để chỉ ra rằng một ngoại lệ PHP đã xảy ra. Sau đó, bộ thực thi PHP sẽ tìm câu lệnh catch để xử lý ngoại lệ

Catch – Chỉ khi một ngoại lệ xảy ra trong khối mã thử thì khối mã này mới được gọi. Ngoại lệ ném ra phải được xử lý bằng mã trong câu lệnh bắt của bạn

Cuối cùng – Câu lệnh "cuối cùng" đã được thêm vào trong PHP 5. 5. Cuối cùng, thay vì hoặc ngoài các khối "bắt", khối "cuối cùng" có thể được chỉ định. Bất kể một ngoại lệ đã được đưa ra hay chưa, mã trong khối "cuối cùng" sẽ luôn được chạy sau các khối thử và bắt và trước khi tiếp tục thực thi bình thường. Điều này rất hữu ích trong các trường hợp bạn muốn đóng kết nối cơ sở dữ liệu bất kể có xảy ra ngoại lệ hay không

#4 Cách triển khai Xử lý ngoại lệ?

Các cơ chế xử lý ngoại lệ như 'thử', 'ném' và 'bắt' được sử dụng rộng rãi

Cố gắng

Khối thử được sử dụng để bao gồm mã có khả năng dẫn đến lỗi. Bất kỳ tình trạng lỗi nào xảy ra trong mã trong khối thử đều có thể được xử lý theo chương trình

Phi

Các ngoại lệ có thể được đưa ra tự động bởi ngôn ngữ lập trình do lỗi cú pháp và cảnh báo hoặc theo cách thủ công bằng mã khi một điều kiện được đáp ứng hoặc không được đáp ứng. Ném là thuật ngữ được sử dụng trong lập trình để mô tả hành động gây ra lỗi. Chỉ từ bên trong khối thử mới có thể ném lỗi theo cách thủ công, như minh họa bên dưới

Từ khóa ném được sử dụng để tạo một thể hiện của lớp ngoại lệ với một chuỗi mô tả ngoại lệ đã được ném. Bất kỳ mã nào trong khối thử xuất hiện sau lệnh gọi ném đều không được thực hiện vì quyền kiểm soát chương trình được chuyển sang khối bắt, đây là nơi xử lý ngoại lệ

Nắm lấy

Bây giờ chúng ta hãy xem cách xử lý hoặc quản lý các ngoại lệ khi chúng ta biết chúng có thể được ném ở đâu và như thế nào. Để bắt một ngoại lệ, hãy sử dụng thuật ngữ thích hợp. Sau phạm vi thử, các thủ tục bắt được khai báo lấy một thể hiện của lớp ngoại lệ làm tham số

#5 Khi nào bạn nên sử dụng thử-bắt-cuối cùng?

Bạn có thể muốn sử dụng phần "cuối cùng" trong mã xử lý lỗi PHP của mình. Cuối cùng, nó được sử dụng không chỉ đơn giản là quản lý ngoại lệ;

Khi khối try-catch kết thúc, khối "cuối cùng" luôn được thực thi

Ví dụ

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";
}

Hoạt động của chương trình được minh họa trong sơ đồ dưới đây

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

Các loại ngoại lệ tùy chỉnh cũng có thể có trong PHP. Điều này có thể hữu ích để xác định các ngoại lệ tùy chỉnh trong ứng dụng của bạn, sau đó bạn có thể xử lý theo cách khác

Chúng ta phải xây dựng một lớp mới với các hàm có thể được gọi khi có ngoại lệ xảy ra để phát triển trình xử lý ngoại lệ tùy chỉnh. Lớp phải là một phần mở rộng lớp ngoại lệ

Bạn có thể thêm các hàm tùy chỉnh vào lớp ngoại lệ tùy chỉnh, lớp này kế thừa các thuộc tính từ lớp Ngoại lệ của PHP. Bạn có thể không muốn hiển thị cho người dùng tất cả các chi tiết của một ngoại lệ;

Một ngoại lệ PHP tùy chỉnh được sử dụng trong ví dụ sau

Các lớp DivideByZeroException[] và DivideByNegativeException[] là các phần mở rộng của lớp Exception hiện tại, kế thừa tất cả các phương thức và thuộc tính của lớp Exception

#7 Trình xử lý ngoại lệ toàn cầu

Có một cơ hội tốt là bạn đã không tính đến tiềm năng của một ngoại lệ. Để đảm bảo an toàn, bạn nên tạo một chức năng toàn cầu, cấp cao nhất để xử lý mọi ngoại lệ không mong muốn. Phương pháp này sẽ giúp bạn xử lý các trường hợp ngoại lệ không có trong khối thử

Hàm set_Exception_handler trong PHP cho phép chúng ta định nghĩa một trình xử lý ngoại lệ như vậy, hàm này nhận đối số là tên của hàm chịu trách nhiệm bắt một ngoại lệ không mong muốn

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

set_exception_handler[‘our_global_exception_handler’];

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

Để xử lý các ngoại lệ bị ném, nhiều ngoại lệ sử dụng nhiều khối thử bắt. Nhiều ngoại lệ là một ý kiến ​​hay khi

  • Bạn muốn hiển thị thông báo tùy chỉnh dựa trên ngoại lệ đã được đưa ra
  • Bạn muốn chạy một hoạt động duy nhất dựa trên ngoại lệ được ném

Nói một cách đơn giản, nếu một đoạn mã có thể đưa ra một số loại ngoại lệ và chúng ta cần thực hiện các hành động khác nhau tùy thuộc vào loại ngoại lệ, thì chúng ta có thể có nhiều khối bắt

Khi xử lý nhiều ngoại lệ với một số khối bắt, có một số điều cần lưu ý

  • Khối bắt cho lớp con của lớp Ngoại lệ phải được đặt phía trên khối bắt cho lớp Ngoại lệ. Nói cách khác, khối bắt xử lý lớp ngoại lệ nên được đặt cuối cùng
  • Vì tất cả các lớp ngoại lệ đều là các lớp con của lớp Exception nên khối catch xử lý lớp Exception cũng có thể xử lý các ngoại lệ khác

Sơ đồ dưới đây cho thấy cách nhiều trường hợp ngoại lệ được xử lý

#9 Ném lại ngoại lệ

Khi một ngoại lệ được ném ra, bạn có thể muốn xử lý nó theo cách khác với cách thông thường. Trong khối "bắt", có thể ném ngoại lệ lần thứ hai

Người dùng không nên biết lỗi hệ thống nếu tập lệnh được sử dụng. Lỗi hệ thống có thể quan trọng đối với lập trình viên nhưng lại không được người dùng quan tâm. Bạn có thể ném lại ngoại lệ bằng một thông báo thân thiện với người dùng để giúp người dùng dễ dàng thực hiện

#10 Cách ghi nhật ký ngoại lệ trong Khối thử bắt PHP của bạn?

Trong quá trình phát triển, nhật ký lỗi rất cần thiết vì chúng cho phép nhà phát triển quan sát các cảnh báo, lỗi, cảnh báo và các sự kiện khác xảy ra trong khi ứng dụng đang hoạt động. Rằng bạn có thể sử dụng phương thức try-catch xử lý ngoại lệ PHP để xử lý chúng một cách thích hợp

Tùy thuộc vào khung công tác PHP mà bạn đang sử dụng, chẳng hạn như Laravel, Codeigniter, Symfony hoặc các khung công tác khác, có thể có sẵn các khung công tác ghi nhật ký tích hợp. Monolog, gói ghi nhật ký PHP tiêu chuẩn, là một tùy chọn khác. Bạn phải luôn ghi nhật ký các ngoại lệ thiết yếu được đưa vào mã của mình, bất kể hệ thống ghi nhật ký bạn đang sử dụng là gì

Đây là một mẫu thử/bắt Monolog báo cáo lỗi

________số 8

#11 Cách sử dụng tính năng bắt thử với MySQL?

Xử lý lỗi được xử lý khác nhau trong các thư viện PHP cho MySQL, PDO và mysqli. Bạn không thể sử dụng các khối thử bắt nếu bạn không bật ngoại lệ cho các thư viện đó. Điều này làm cho việc xử lý lỗi trở nên độc nhất và có thể khó khăn hơn

PDO

Khi thực hiện kết nối trong PDO, bạn phải kích hoạt ERRMODE_EXCEPTION

ERRMODE_EXCEPTION là chế độ mặc định kể từ PHP 8. 0. 0. PDO sẽ đưa ra một PDOException và điều chỉnh các thuộc tính của nó để phản ánh mã lỗi và thông tin chi tiết về lỗi để cập nhật mã lỗi. Tính năng này đặc biệt hữu ích trong khi gỡ lỗi vì nó thực sự thổi bay tập lệnh tại điểm xảy ra lỗi, chỉ tay vào các điểm có thể có sự cố trong mã của bạn rất nhanh. Nếu tập lệnh gặp sự cố do ngoại lệ, các giao dịch sẽ tự động được khôi phục

// connect to MySQL
$conn = new PDO['mysql:host=localhost;dbname=atatusdb;charset=utf8mb4', 'username', 'password'];

//PDO error mode to exception
$conn->setAttribute[PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION];

mysql

Bạn cũng phải làm điều gì đó tương tự cho mysqli

0

#12 Xem tất cả ngoại lệ PHP ở một nơi

Trong PHP, xử lý ngoại lệ thích hợp là rất quan trọng. Bạn không muốn chỉ ghi các 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 như một phần của điều đó

Sử dụng một công cụ theo dõi lỗi như Atatus như một giải pháp. Tất cả các lỗi được ghi lại và ghi lại cùng với thông tin chính về chúng, chẳng hạn như lớp, thông báo, URL, tác nhân yêu cầu, phiên bản, v.v.

Trong Atatus, tất cả các lỗi được tự động ghi lại và sắp xếp để chúng có thể dễ dàng truy cập. Atatus sẽ không chỉ cho bạn biết lỗi nào đã xảy ra mà còn điều tra xem chúng xảy ra ở đâu và tại sao. Thời gian và số lượng sự cố cũng được hiển thị trong nhật ký, giúp dễ dàng xác định vấn đề nào cần được giải quyết trước

Các công cụ theo dõi và giám sát lỗi được bao gồm trong Trạng thái. Trong số các tính năng có khả năng xem tất cả các lỗi ở một vị trí, khả năng xác định các lỗi duy nhất, khả năng xác định lỗi mới nhanh hơn sau khi triển khai, thông báo qua email về lỗi, v.v.

Giải pháp quản lý nhật ký và lỗi từ Atatus 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

gói nó

Chúng tôi nhận ra rằng cần phải chuẩn bị cho các tình huống bất ngờ luôn cần có ngoại lệ. Để làm điều này, chúng ta có thể bọc mã của mình trong các khối thử, có các phương thức bắt thích hợp để xử lý các lỗi bị ném và một trình xử lý ngoại lệ toàn cầu để xử lý mọi thứ khác. Bây giờ bạn đã thu thập tất cả các thông tin cần thiết, hãy tiếp tục và tạo các ngoại lệ của riêng bạn

Làm cách nào để xử lý lỗi cơ sở dữ liệu trong CodeIgniter?

Để khắc phục lỗi, trước tiên, chúng tôi cần kiểm tra chéo thông tin đăng nhập cơ sở dữ liệu được định cấu hình trong tệp cấu hình . Đảm bảo rằng không có ký tự thừa nào được thêm vào thông tin xác thực trong tệp. Ngoài ra, điều quan trọng là phải đảm bảo rằng người dùng MySQL có quyền thích hợp được thiết lập để truy cập cơ sở dữ liệu.

Làm cách nào để bật báo cáo lỗi trong CodeIgniter?

Theo mặc định, CodeIgniter hiển thị tất cả lỗi PHP. Bạn có thể muốn thay đổi hành vi này sau khi quá trình phát triển của bạn hoàn tất. Bạn sẽ tìm thấy hàm error_reporting[] nằm ở đầu chỉ mục chính của bạn. tệp php .

Làm cách nào để kiểm tra lỗi trong CodeIgniter 4?

Theo mặc định, CodeIgniter sẽ hiển thị tất cả lỗi trong môi trường phát triển và thử nghiệm và sẽ không hiển thị bất kỳ lỗi nào trong môi trường sản xuất. Bạn có thể thay đổi điều này bằng cách đặt biến CI_ENVIRONMENT trong. tệp env .

Làm cách nào để bắt ngoại lệ cơ sở dữ liệu trong PHP?

PHP xử lý lỗi từ khóa . 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. Bộ thực thi PHP sau đó sẽ cố gắng tìm một câu lệnh bắt để xử lý ngoại lệ . Nắm 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ử.

Chủ Đề