Php thử bắt mà không bắt

Các khối try-catch trong PHP có thể được lồng vào nhau ở bất kỳ cấp độ mong muốn nào và được xử lý theo thứ tự ngược lại. e. ngoại lệ trong cùng được xử lý đầu tiên. Các khối lồng nhau có thể hữu ích trong trường hợp một khối mã gây ra ngoại lệ, ngoại lệ này có thể được xử lý trong khối đó và việc thực thi chương trình có thể tiếp tục ở khối bên ngoài. Chúng cũng có thể hữu ích trong trường hợp việc xử lý một ngoại lệ gây ra một ngoại lệ khác

Đây là một ví dụ về khối try-catch lồng nhau

try{
   try{
      if[file_exists["myfile.json"]]{
         //upload file
      } else {
         throw new Exception[ 'File not found'];  
      }
   }
   catch [Exception $e]{
      throw new Exception[ 'Unable to upload file',0,$e];
   }
   //continue outer try block code
}
catch [Exception $e]{
   echo $e->getMessage[] . "
"; while[$e = $e->getPrevious[]] { echo 'Previous exception: '.$e->getMessage[] . "
"; } }

Trong ví dụ này, một tệp được tải lên và nó được kiểm tra xem tệp có tồn tại hay không trước khi thao tác tải lên. Nếu nó không tồn tại, một ngoại lệ được ném ra. Mã này kiểm tra xem tệp có tồn tại hay không được đặt trong một khối try-catch, khối này được lồng trong một khối try-catch khác

Trong trường hợp không tìm thấy tệp, khối bên trong sẽ đưa ra ngoại lệ 'Không thể tải tệp lên', ngoại lệ này sẽ bị khối bên ngoài bắt và xử lý, dẫn đến đầu ra sau

Unable to upload file
Previous exception: File not found

 

Theo dõi, phân tích và quản lý lỗi với Rollbar

Quản lý lỗi và ngoại lệ trong mã của bạn là một thách thức. Nó có thể làm cho việc triển khai mã sản xuất trở thành một trải nghiệm đáng sợ. Khả năng theo dõi, phân tích và quản lý lỗi trong thời gian thực có thể giúp bạn tiến hành một cách tự tin hơn. Rollbar tự động theo dõi và xử lý lỗi, giúp việc sửa lỗi PHP trở nên dễ dàng hơn bao giờ hết. Thử nó ngay hôm nay

Phương pháp chính để xử lý các ngoại lệ trong PHP là try-catch. Tóm lại, try-catch là một khối mã có thể được sử dụng để xử lý các ngoại lệ được ném ra mà không làm gián đoạn quá trình thực thi chương trình. Nói cách khác, bạn có thể "thử" thực thi một khối mã và "bắt" bất kỳ ngoại lệ PHP nào được đưa ra

PHP lồng nhau try-catch

Các khối try-catch trong PHP có thể được lồng vào nhau ở bất kỳ cấp độ mong muốn nào và được xử lý theo thứ tự ngược lại. e. ngoại lệ trong cùng được xử lý đầu tiên

Các khối lồng nhau có thể hữu ích trong trường hợp một khối mã gây ra ngoại lệ, ngoại lệ này có thể được xử lý trong khối đó và việc thực thi chương trình có thể tiếp tục ở khối bên ngoài

Chúng cũng có thể hữu ích trong trường hợp việc xử lý một ngoại lệ gây ra một ngoại lệ khác

Đây là một ví dụ về khối try-catch lồng nhau

try{
   try{
      if[file_exists["myfile.json"]]{
         //upload file
      } else {
         throw new Exception[ 'File not found'];  
      }
   }
   catch [Exception $e]{
      throw new Exception[ 'Unable to upload file',0,$e];
   }
   //continue outer try block code
}
catch [Exception $e]{
   echo $e->getMessage[] . "
"; while[$e = $e->getPrevious[]] { echo 'Previous exception: '.$e->getMessage[] . "
"; } }

Trong ví dụ này, một tệp được tải lên và nó được kiểm tra xem tệp có tồn tại hay không trước khi thao tác tải lên. Nếu nó không tồn tại, một ngoại lệ được ném ra

Mã này kiểm tra xem tệp có tồn tại hay không được đặt trong một khối try-catch, khối này được lồng trong một khối try-catch khác

Trong trường hợp không tìm thấy tệp, khối bên trong sẽ đưa ra ngoại lệ 'Không thể tải tệp lên', ngoại lệ này sẽ bị khối bên ngoài bắt và xử lý, dẫn đến đầu ra sau

Unable to upload file
Previous exception: File not found

Bắt tất cả các ngoại lệ PHP

Cách đơn giản nhất để bắt ngoại lệ là thông qua việc sử dụng khối thử bắt chung. Bởi vì các ngoại lệ là các đối tượng, nên tất cả chúng đều mở rộng một lớp Ngoại lệ tích hợp sẵn [xem Ném ngoại lệ trong PHP], có nghĩa là việc nắm bắt mọi ngoại lệ PHP được ném ra cũng đơn giản như gợi ý kiểu đối tượng ngoại lệ chung, được biểu thị bằng cách thêm dấu gạch chéo ngược vào

try {
  // ...
} catch [ \Exception $e ] {
  // ...
}

Bắt các ngoại lệ PHP cụ thể

Mặc dù việc nắm bắt mọi ngoại lệ được ném ra là rất tốt cho việc triển khai đơn giản—chẳng hạn như tổng quát hóa các phản hồi lỗi API—cách thực hành tốt nhất là nắm bắt các ngoại lệ PHP cụ thể. Bằng cách sử dụng cùng một phương pháp gợi ý kiểu được hiển thị ở trên để tham chiếu đến các đối tượng ngoại lệ cụ thể thay vì một đối tượng ngoại lệ chung, bạn có thể phản ứng hiệu quả hơn với các sự cố riêng lẻ mà ứng dụng của bạn có thể gặp phải trên đường đi.

try {
  // ...
} catch [ \Custom\Exception $e ] {
  // ...
}

Tuy nhiên, chỉ bắt một loại ngoại lệ PHP không có giá trị lắm phải không?

try {
  // ...
} catch [ \Custom\Exception $e ] {
  // ...
} catch [ \Other\Exception $e ] {
  // ...
} catch [ \Exception $e ] {
  // ...
}

Trình xử lý ngoại lệ

Mặc dù gói mã nguy hiểm trong các khối thử bắt là một cách tuyệt vời để bảo vệ ứng dụng khỏi các lỗi PHP không mong muốn, nhưng không phải lúc nào bạn cũng có thể bắt được mọi thứ. Đôi khi một ngoại lệ rơi vào kẽ hở, đó là lúc trình xử lý ngoại lệ PHP toàn cầu phát huy tác dụng. Phương pháp này, được đặt tên là set_Exception_handler, cung cấp dự phòng cho mọi trường hợp ngoại lệ chưa được phát hiện

set_exception_handler[function[$exception] {
  // ..  
}];

Mặc dù bạn có thể sử dụng phương thức này theo một số cách khác nhau, nhưng nó thường được sử dụng tốt nhất để ghi nhật ký và định dạng hiển thị, vì mọi ngoại lệ PHP được ném ra sẽ bị bắt—không chỉ ngoại lệ tích hợp sẵn—điều này có thể dẫn đến hành vi không thể đoán trước nếu không được sử dụng đúng cách

Xử lý ngoại lệ khuôn khổ PHP

Mặc dù trình xử lý ngoại lệ toàn cầu có thể được sử dụng bất kể khung công tác nào, nhưng điều quan trọng cần biết là các khung công tác như Symfony và Laravel có cách riêng để xử lý các ngoại lệ PHP. Laravel, ví dụ, xử lý tất cả các ngoại lệ bằng cách sử dụng một lớp xác định cách các ngoại lệ sẽ được báo cáo và hiển thị. Mặt khác, Symfony sử dụng trình lắng nghe sự kiện để bắt ngoại lệ. Cả hai cách hợp lệ để xử lý các ngoại lệ PHP, nhưng được thiết kế để phù hợp với hệ sinh thái của riêng chúng

Kiểm tra blog của chúng tôi để xem một ví dụ hoạt động về báo cáo lỗi của Laravel

Theo dõi, phân tích và quản lý lỗi PHP với Rollbar

Quản lý lỗi và ngoại lệ PHP trong mã của bạn là một thách thức. Nó có thể làm cho việc triển khai mã sản xuất trở thành một trải nghiệm đáng sợ. Khả năng theo dõi, phân tích và quản lý lỗi trong thời gian thực có thể giúp bạn tiến hành một cách tự tin hơn. Rollbar tự động theo dõi và xử lý lỗi, giúp việc sửa lỗi PHP trở nên dễ dàng hơn bao giờ hết. Tìm hiểu thêm về các tính năng của Rollbar dành cho PHP và sau đó đăng ký dùng thử miễn phí

Chúng ta có thể sử dụng try mà không bắt trong PHP không?

Hãy thử, ném và bắt . try - Hàm sử dụng ngoại lệ phải nằm trong khối "thử". 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, một ngoại lệ sẽ bị "ném"

Tôi có thể sử dụng thử mà không bắt được không?

Có, có thể có khối thử mà không có khối bắt bằng cách sử dụng khối cuối cùng . Như chúng ta đã biết, một khối cuối cùng sẽ luôn thực thi ngay cả khi có một ngoại lệ xảy ra trong một khối thử, ngoại trừ Hệ thống. exit[] nó sẽ thực thi luôn.

Tại sao cố gắng cuối cùng mà không bắt?

Có, chúng ta có thể thử mà không cần bắt khối bằng cách sử dụng khối cuối cùng. Bạn có thể sử dụng thử với cuối cùng. Như bạn đã biết khối cuối cùng luôn thực thi ngay cả khi bạn có ngoại lệ hoặc câu lệnh trả về trong khối thử ngoại trừ trường hợp Hệ thống .

Catch có bắt buộc phải thử không?

Không, hoàn toàn không. Không bắt buộc phải đặt lệnh bắt sau khối thử, trừ khi và cho đến khi khối thử được theo sau bởi khối cuối cùng . Chỉ cần nhớ một điều, sau khi thử, bắt hoặc cuối cùng hoặc cả hai đều có thể hoạt động.

Chủ Đề