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

Xử lý ngoại lệ với finally trong PHP

Giới thiệu

Code trong block finally sẽ luôn được thực thi चाहे có exception trong try block hay không. Block này xuất hiện sau catch block hoặc thay cho catch block.

Catch và finally block

Trong ví dụ sau, cả catch và finally đều có. Nếu exception xảy ra trong try, code trong cả hai đều chạy. Nếu không có exception, chỉ finally chạy.

<?php
function div($x, $y) {
    if (!$y) {
        throw new Exception('Division by zero.');
    }
    return $x / $y;
}
try {
    echo div(10, 0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ', $e->getMessage(), "\n";
}
finally {
    echo "This block is always executed\n";
}
// Tiếp tục thực thi
echo "Execution continues\n";
?>

Kết quả

Caught exception: Division by zero.
This block is always executed
Execution continues

Thay đổi try block để không có exception:

<?php
function div($x, $y) {
    if (!$y) {
        throw new Exception('Division by zero.');
    }
    return $x / $y;
}
try {
    echo div(10, 5) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ', $e->getMessage(), "\n";
}
finally {
    echo "This block is always executed\n";
}
echo "Execution continues\n";
?>

Kết quả

2
This block is always executed
Execution continues

Chỉ có finally block (không catch)

Ví dụ sau có hai try block. Một trong chúng chỉ có finally block. Try block của nó gọi div function ném exception:

<?php
function div($x, $y) {
    try {
        if (!$y) {
            throw new Exception('Division by zero.');
        }
        return $x / $y;
    }
    catch (Exception $e) {
        echo 'Caught exception: ', $e->getMessage(), "\n";
    }
}
try {
    echo div(10, 0) . "\n";
}
finally {
    echo "This block is always executed\n";
}
echo "Execution continues\n";
?>

Kết quả

Caught exception: Division by zero.
This block is always executed
Execution continues