Giới thiệu
Giao diện có thể ném được thực hiện bởi lớp Lỗi và Ngoại lệ. Tất cả các lớp Lỗi được xác định trước đều được kế thừa từ lớp Lỗi. Phiên bản của lớp Lỗi tương ứng được đưa vào bên trong khối try và được xử lý bên trong khối bắt thích hợp.
Lỗi ném
Quá trình 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 khi khối bắt cuối cùng được xác định theo trình tự.
Ví dụ
<?php function div($x, $y) { if (!$y) { throw new Exception('Division by zero.'); } return $x/$y; } try { echo div(10,5) . "\n"; echo div(10,0) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } // Continue execution echo "Execution continues\n"; ?>
Đầu ra
Kết quả sau được hiển thị
2 Caught exception: Division by zero. Execution continues
Trong ví dụ sau, TypeError được ném trong khi thực thi một hàm bởi vì các đối số thích hợp không được chuyển cho nó. Thông báo lỗi tương ứng được hiển thị
Ví dụ
<?php function add(int $num1, int $num2){ return $num1 + $num2; } try { $value = add(1, 'one'); } catch (TypeError $e) { echo $e->getMessage(). "\n"; } ?>
Đầu ra
Kết quả sau được hiển thị
Argument 2 passed to add() must be of the type integer, string given
Ngoại lệ SPL
Thư viện PHP tiêu chuẩn chứa các ngoại lệ được xác định trước
LogicException | Ngoại lệ biểu thị lỗi trong logic chương trình. |
BadFunctionCallException | Được đưa ra ngoại lệ nếu một lệnh gọi lại tham chiếu đến một hàm không xác định hoặc nếu thiếu một số đối số. |
BadMethodCallException | Ngoại lệ được ném ra nếu một lệnh gọi lại tham chiếu đến một phương thức không xác định hoặc nếu thiếu một số đối số. |
Ngoại lệ miền | Ngoại lệ được ném ra nếu giá trị không tuân theo miền dữ liệu hợp lệ đã xác định. |
InvalidArgumentException | Ngoại lệ được ném ra nếu một đối số không thuộc loại mong đợi. |
LengthException | Ngoại lệ được ném ra nếu độ dài không hợp lệ. |
OutOfRangeException | Ngoại lệ được đưa ra khi một chỉ mục bất hợp pháp được yêu cầu. |
RuntimeException | Ngoại lệ được ném ra nếu xảy ra lỗi chỉ có thể được tìm thấy trong thời gian chạy. |
OutOfBoundsException | Ngoại lệ được ném ra nếu giá trị không phải là khóa hợp lệ. |
OverflowException | Đã ném ngoại lệ khi thêm phần tử vào vùng chứa đầy đủ. |
RangeException | Đã ném ngoại lệ để chỉ ra lỗi phạm vi trong quá trình thực thi chương trình. Một lỗi số học không phải dưới / tràn. |
UnderflowException | Ngoại lệ được ném ra khi thực hiện một thao tác không hợp lệ trên vùng chứa trống, chẳng hạn như xóa một phần tử. |
Bất ngờ về giá trị ngoại lệ | Ngoại lệ được ném ra nếu một giá trị không khớp với một bộ giá trị. |
Ví dụ sau cho thấy OutOfBoundsException được ném khi không tìm thấy khóa trong mảng PHP
Ví dụ
<?php $arr=array("one"=>1, "two"=>2,"three"=>3,"four"=>4); $key="ten"; try{ if (array_key_exists($key, $arr)==FALSE){ throw new OutOfBoundsException("key not found");} else { echo $arr[$key];} } catch (OutOfBoundsException $e){ echo $e->getMessage(). "\n"; } ?>
Đầu ra
Kết quả sau được hiển thị
Không tìm thấy khóakey not found