Hướng dẫn what is try catch in php - try catch trong php là gì

Mục lục

  • Mở rộng ngoại lệ

PHP có một mô hình ngoại lệ tương tự như các ngôn ngữ lập trình khác. Một ngoại lệ có thể là throwN và bị bắt ("catched") trong PHP. Mã có thể được bao quanh trong một khối try, để tạo điều kiện cho việc bắt các ngoại lệ tiềm năng. Mỗi try phải có ít nhất một khối catch hoặc finally tương ứng.

Nếu một ngoại lệ được ném và phạm vi chức năng hiện tại của nó không có khối catch, thì ngoại lệ sẽ "bong bóng lên" ngăn xếp cuộc gọi đến hàm gọi cho đến khi tìm thấy khối catch phù hợp. Tất cả finally khối mà nó gặp trên đường đi sẽ được thực thi. Nếu ngăn xếp cuộc gọi không được chứng minh tất cả các phạm vi toàn cầu mà không gặp phải khối ____3 phù hợp, chương trình sẽ chấm dứt với một lỗi nghiêm trọng trừ khi một trình xử lý ngoại lệ toàn cầu đã được đặt.

Đối tượng ném phải là một cú ném

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
2. Cố gắng ném một đối tượng không dẫn đến lỗi nghiêm trọng của PHP.Throwable. Trying to throw an object that is not will result in a PHP Fatal Error.

Kể từ Php 8.0.0, từ khóa throw là một biểu thức và có thể được sử dụng trong bất kỳ ngữ cảnh biểu thức nào. Trong các phiên bản trước đó là một tuyên bố và được yêu cầu phải ở trên dòng riêng của nó.

catch

Khối catch xác định cách phản ứng với một ngoại lệ ném. Khối catch xác định một hoặc nhiều loại ngoại lệ hoặc lỗi mà nó có thể xử lý và tùy chọn là một biến để gán ngoại lệ. .

Nhiều khối catch có thể được sử dụng để bắt các lớp ngoại lệ khác nhau. Thực thi bình thường (khi không có ngoại lệ nào được ném trong khối try) sẽ tiếp tục sau khối catch cuối cùng được xác định theo trình tự. Các trường hợp ngoại lệ có thể là throwN (hoặc cảm ứng lại) trong một khối catch. Nếu không, việc thực thi sẽ tiếp tục sau khối catch được kích hoạt.

Khi một ngoại lệ được ném, mã theo câu lệnh sẽ không được thực thi và PHP sẽ cố gắng tìm khối catch khớp đầu tiên. Nếu một ngoại lệ không bị bắt, một lỗi nghiêm trọng của PHP sẽ được đưa ra với thông báo "throw5", trừ khi một trình xử lý đã được xác định với set_exception_handler ().set_exception_handler().

Kể từ Php 7.1.0, một khối catch có thể chỉ định nhiều ngoại lệ bằng cách sử dụng ký tự đường ống (throw7). Điều này rất hữu ích cho khi các ngoại lệ khác nhau từ các phân cấp lớp khác nhau được xử lý giống nhau.

Kể từ Php 8.0.0, tên biến cho một ngoại lệ bị bắt là tùy chọn. Nếu không được chỉ định, khối catch vẫn sẽ thực thi nhưng sẽ không có quyền truy cập vào đối tượng ném.

finally

Một khối finally cũng có thể được chỉ định sau hoặc thay vì các khối catch. Mã trong khối finally sẽ luôn được thực thi sau các khối trycatch, bất kể ngoại lệ có bị ném hay không và trước khi thực hiện bình thường tiếp tục.

Một tương tác đáng chú ý là giữa khối finally và câu lệnh catch6. Nếu một câu lệnh catch6 gặp phải bên trong các khối try hoặc catch, khối finally vẫn sẽ được thực thi. Hơn nữa, câu lệnh catch6 được đánh giá khi gặp phải, nhưng kết quả sẽ được trả về sau khi khối finally được thực thi. Ngoài ra, nếu khối finally cũng chứa câu lệnh catch6, giá trị từ khối finally được trả về.

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

Nếu một ngoại lệ được phép bong bóng lên phạm vi toàn cầu, nó có thể bị bắt bởi một trình xử lý ngoại lệ toàn cầu nếu được đặt. Hàm set_exception_handler () có thể đặt hàm sẽ được gọi thay cho khối catch nếu không có khối nào được gọi. Hiệu ứng về cơ bản giống như khi toàn bộ chương trình được bọc trong khối ________ 4 -________ 3 với chức năng đó là catch.set_exception_handler() function can set a function that will be called in place of a catch block if no other block is invoked. The effect is essentially the same as if the entire program were wrapped in a try-catch block with that function as the catch.

Ghi chú

Ghi chú::

Các hàm PHP nội bộ chủ yếu sử dụng báo cáo lỗi, chỉ các tiện ích mở rộng hướng đối tượng hiện đại sử dụng các ngoại lệ. Tuy nhiên, các lỗi có thể dễ dàng được dịch sang các ngoại lệ với errorException. Kỹ thuật này chỉ hoạt động với các lỗi không gây tử vong, tuy nhiên.

Ví dụ #1 Báo cáo lỗi chuyển đổi thành ngoại lệ

try0

Ví dụ

Ví dụ #2 ném một ngoại lệ

try1

try2

try3

Ví dụ trên sẽ xuất ra:

0.2
Caught exception: Division by zero.
Hello World

Ví dụ #3 Xử lý ngoại lệ với khối finally

try1

try2

try7

Ví dụ trên sẽ xuất ra:

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World

Ví dụ #3 Xử lý ngoại lệ với khối finally

catch0

catch1

catch2

Ví dụ trên sẽ xuất ra:

Ví dụ #3 Xử lý ngoại lệ với khối finally

catch3

catch4

catch5

Ví dụ trên sẽ xuất ra:

Ví dụ #6 Xử lý ngoại lệ Multi Catch

catch3

catch4

catch8

Ví dụ trên sẽ xuất ra:

Ví dụ #7 bỏ qua biến bị bắt

Chỉ được phép trong Php 8.0.0 trở lên.

catch9

finally0

finally1

Ví dụ số 8 ném như một biểu thức

Chỉ được phép trong Php 8.0.0 trở lên.

catch9

finally0

finally4

Ví dụ số 8 ném như một biểu thức

Hỏi tại Nilpo Dot Com ¶

finally5

finally6

finally7

finally8

13 năm trước

Johan ¶

finally9

catch0

catch1

11 năm trước

Christof+php [at] insypro.com ¶

catch2

catch3

catch4

catch5

5 năm trước

Shot (Piotr Szotkowski) ¶

catch6

catch7

catch8

catch1

14 năm trước

Simo ¶

catch0

7 năm trước

Edu ¶

catch1

catch2

catch3

catch1

9 năm trước

mlaopane tại gmail dot com ¶

catch5

catch6

catch7

4 năm trước

Christof+php [at] insypro.com ¶

catch8

catch9

catch1

5 năm trước

Shot (Piotr Szotkowski) ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
01

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
02

catch1

14 năm trước

Simo ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
04

7 năm trước

Edu ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
05

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
06

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
07

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
08

9 năm trước

mlaopane tại gmail dot com ¶

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
09

0.2
First finally.
Caught exception: Division by zero.
Second finally.
Hello World
10

catch1

Thử bắt là gì?

Tuyên bố thử thử bao gồm một khối thử theo sau là một hoặc nhiều điều khoản bắt, chỉ định trình xử lý cho các ngoại lệ khác nhau.Khi một ngoại lệ được ném, thời gian chạy ngôn ngữ phổ biến (CLR) tìm kiếm câu lệnh Catch xử lý ngoại lệ này.consists of a try block followed by one or more catch clauses, which specify handlers for different exceptions. When an exception is thrown, the common language runtime (CLR) looks for the catch statement that handles this exception.

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

Một ngoại lệ là một đối tượng mô tả một lỗi hoặc hành vi bất ngờ của tập lệnh PHP.Các trường hợp ngoại lệ được ném bởi nhiều chức năng và lớp PHP.Các chức năng và lớp học do người dùng xác định cũng có thể ném ngoại lệ.Ngoại lệ là một cách tốt để ngăn chặn một chức năng khi nó xuất hiện dữ liệu mà nó không thể sử dụng.an object that describes an error or unexpected behaviour of a PHP script. Exceptions are thrown by many PHP functions and classes. User defined functions and classes can also throw exceptions. Exceptions are a good way to stop a function when it comes across data that it cannot use.

PHP có thể thử có nhiều lần bắt không?

Nhiều khối đánh bắt có thể được sử dụng để bắt các lớp ngoại lệ khác nhau.Thực thi bình thường (khi không có ngoại lệ nào được ném trong khối thử) sẽ tiếp tục sau khi khối bắt cuối cùng được xác định theo trình tự.Các trường hợp ngoại lệ có thể được ném N (hoặc ném lại) trong một khối bắt.. Normal execution (when no exception is thrown within the try block) will continue after that last catch block defined in sequence. Exceptions can be throw n (or re-thrown) within a catch block.