Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

Ném ngoại lệ (Throwing Exceptions) trong PHP

Giới thiệu

Interface Throwable được triển khai bởi class Error và Exception. Tất cả các class Error định nghĩa sẵn kế thừa từ class Error. Instance của class Error tương ứng được ném bên trong block try và xử lý bên trong catch block phù hợp.

Ném Error (Exception)

Thực thi bình thường (khi không có exception ném trong try block) sẽ tiếp tục sau catch block cuối cùng được định nghĩa trong chuỗi.

Ví dụ: Exception tùy chỉnh

<?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";
}
// Tiếp tục thực thi
echo "Execution continues\n";
?>

Kết quả

2
Caught exception: Division by zero.
Execution continues

Ví dụ: TypeError

Trong ví dụ sau, TypeError được ném khi thực thi hàm vì đối số không phù hợp được truyền:

<?php
function add(int $num1, int $num2) {
    return $num1 + $num2;
}
try {
    $value = add(1, 'one');
} catch (TypeError $e) {
    echo $e->getMessage() . "\n";
}
?>

Kết quả

Argument 2 passed to add() must be of the type integer, string given

SPL Exceptions (Ngoại lệ thư viện chuẩn)

Thư viện chuẩn PHP (SPL) chứa các exception định nghĩa sẵn:

ExceptionMô tả
LogicExceptionException biểu diễn lỗi trong logic chương trình.
BadFunctionCallExceptionNém nếu callback tham chiếu hàm không định nghĩa hoặc thiếu đối số.
BadMethodCallExceptionNém nếu callback tham chiếu method không định nghĩa hoặc thiếu đối số.
DomainExceptionNém nếu giá trị không tuân theo miền dữ liệu hợp lệ định nghĩa.
InvalidArgumentExceptionNém nếu đối số không phải kiểu mong đợi.
LengthExceptionNém nếu độ dài không hợp lệ.
OutOfRangeExceptionNém khi index không hợp lệ được yêu cầu.
RuntimeExceptionNém nếu lỗi chỉ tìm thấy tại runtime.
OutOfBoundsExceptionNém nếu giá trị không phải key hợp lệ.
OverflowExceptionNém khi thêm phần tử vào container đầy.
RangeExceptionChỉ thị lỗi phạm vi trong thực thi. Lỗi số học trừ under/overflow.
UnderflowExceptionNém khi thực hiện phép toán không hợp lệ trên container rỗng (vd: xóa phần tử).
UnexpectedValueExceptionNém nếu giá trị không khớp với tập giá trị định nghĩa.

Ví dụ: OutOfBoundsException

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

Kết quả

key not found