Giới thiệu
Các block try-catch có thể lồng nhau đến bất kỳ mức độ mong muốn. Ngoại lệ sẽ được xử lý theo thứ tự ngược lại thứ tự xuất hiện, tức là xử lý exception bên trong (innermost) trước.
Ví dụ
Trong ví dụ sau, inner try block kiểm tra nếu một trong hai biến không phải numeric, ném user-defined exception. Outer try block ném DivisionByZeroError nếu mẫu số là 0. Nếu không, phép chia được hiển thị.
<?php
class myException extends Exception {
function message() {
return "error : " . $this->getMessage() . " in line no " . $this->getLine();
}
}
$x = 10;
$y = 0;
try {
if (is_numeric($x) == FALSE || is_numeric($y) == FALSE)
throw new myException("Non numeric data");
} catch (myException $m) {
echo $m->message();
return;
}
if ($y == 0)
throw new DivisionByZeroError("Division by 0");
echo $x / $y;
} catch (DivisionByZeroError $e) {
echo $e->getMessage() . " in line no " . $e->getLine();
}
?>
Kết quả
Division by 0 in line no 19
Thay đổi một biến thành non-numeric:
error : Non numeric data in line no 20
Nếu cả hai biến đều là số, phép chia được in ra.