Một ngoại lệ là tín hiệu cho biết một số loại sự kiện hoặc lỗi đặc biệt đã xảy ra. Các ngoại lệ có thể xảy ra do nhiều lý do, chẳng hạn như kết nối cơ sở dữ liệu hoặc truy vấn không thành công, tệp mà bạn đang cố truy cập không tồn tại, v.v.
PHP cung cấp một cơ chế xử lý ngoại lệ mạnh mẽ cho phép bạn xử lý các ngoại lệ một cách dễ dàng. Trái ngược với hệ thống xử lý lỗi truyền thống của PHP, xử lý ngoại lệ là phương pháp hướng đối tượng để xử lý lỗi, cung cấp hình thức báo cáo lỗi được kiểm soát và linh hoạt hơn. Mô hình ngoại lệ lần đầu tiên được giới thiệu trong PHP 5
Sử dụng Ném và Thử. Tuyên bố bắt
Theo cách tiếp cận dựa trên ngoại lệ, mã chương trình được viết trong một khối
Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
7, một ngoại lệ có thể được đưa ra bằng cách sử dụng câu lệnh Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
8 khi một sự kiện đặc biệt xảy ra trong quá trình thực thi mã trong khối Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
7. Sau đó, nó được bắt và giải quyết bằng một hoặc nhiều khối Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
0Ví dụ sau minh họa cách xử lý ngoại lệ hoạt động
$dividend / $divisor = $quotient";
}
}
try{
division[10, 2];
division[30, -4];
division[15, 0];
// If exception is thrown following line won't execute
echo 'All divisions performed successfully.
';
} catch[Exception $e]{
// Handle the exception
echo "Caught exception: " . $e->getMessage[] . "
";
}
// Continue execution
echo "Hello World!
";
?>
Bạn có thể tự hỏi mã này là gì. Chà, hãy lần lượt đi qua từng phần của mã này để hiểu rõ hơn
Giải thích mã
Hệ thống xử lý ngoại lệ của PHP về cơ bản có bốn phần.
Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
7, Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
8, Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
0 và lớp Ngoại lệ. Danh sách sau đây mô tả chính xác cách thức hoạt động của từng bộ phận- Hàm
1 trong ví dụ trên kiểm tra xem một ước số có bằng 0 không. Nếu đúng như vậy, một ngoại lệ sẽ được đưa ra thông qua câu lệnhCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?>
8 của PHP. Mặt khác, hàm này thực hiện phép chia sử dụng các số đã cho và hiển thị kết quảCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?> - Sau đó, hàm
1 được gọi trong khốiCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?>
7 với các đối số khác nhau. Nếu một ngoại lệ được tạo trong khi thực thi mã trong khốiCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?>
7, PHP sẽ dừng thực thi tại thời điểm đó và cố gắng tìm khốiCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?>
0 tương ứng. Nếu nó được tìm thấy, mã bên trong khốiCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?>
0 đó sẽ được thực thi, nếu không, một lỗi nghiêm trọng sẽ được tạo raCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?> - Khối
0 thường bắt ngoại lệ được ném trong khốiCaught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?>
7 và tạo một đối tượng [Caught Exception!"; echo "
Error message: " . $e->getMessage[] . "
"; echo "File: " . $e->getFile[] . "
"; echo "Line: " . $e->getLine[] . "
"; echo "Error code: " . $e->getCode[] . "
"; echo "Trace: " . $e->getTraceAsString[] . "
"; } ?>
0] chứa thông tin ngoại lệ. Thông báo lỗi từ đối tượng này có thể được truy xuất bằng phương pháp Exception'sPlease enter your E-mail address!"]; } // Throw exception if email is not valid if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] { throw new InvalidEmailException["
$email is not a valid E-mail address!
"]; } // Display success message if email is valid echo "SUCCESS: Email validation successful.
"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
1Please enter your E-mail address!"]; } // Throw exception if email is not valid if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] { throw new InvalidEmailException["
$email is not a valid E-mail address!
"]; } // Display success message if email is valid echo "SUCCESS: Email validation successful.
"; } catch[EmptyEmailException $e]{ echo $e->getMessage[]; } catch[InvalidEmailException $e]{ echo $e->getMessage[]; } ?>
Lớp Exception của PHP cũng cung cấp các phương thức
Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
2, Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
3, Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
4 và Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
5 có thể được sử dụng để tạo thông tin gỡ lỗi chi tiếtCaught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
Hàm tạo của Exception tùy chọn nhận thông báo ngoại lệ và mã ngoại lệ. Mặc dù thông báo ngoại lệ thường được sử dụng để hiển thị thông tin chung về lỗi đã xảy ra, nhưng mã ngoại lệ có thể được sử dụng để phân loại lỗi. Mã ngoại lệ đã cung cấp có thể được truy xuất sau thông qua phương pháp Exception's
Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
2Mẹo. Ngoại lệ chỉ nên được sử dụng để biểu thị các điều kiện ngoại lệ; . g. , chuyển đến một vị trí khác trong tập lệnh tại một điểm cụ thể. Làm điều đó sẽ ảnh hưởng xấu đến hiệu suất của ứng dụng của bạn
Xác định ngoại lệ tùy chỉnh
Bạn thậm chí có thể xác định trình xử lý ngoại lệ tùy chỉnh của riêng mình để xử lý các loại ngoại lệ khác nhau theo một cách khác. Nó cho phép bạn sử dụng một khối
Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
0 riêng biệt cho từng loại ngoại lệBạn có thể định nghĩa một ngoại lệ tùy chỉnh bằng cách mở rộng lớp Ngoại lệ, bởi vì Ngoại lệ là lớp cơ sở cho tất cả các ngoại lệ. Lớp ngoại lệ tùy chỉnh kế thừa tất cả các thuộc tính và phương thức từ lớp Ngoại lệ của PHP. Bạn cũng có thể thêm các phương thức tùy chỉnh của mình vào lớp ngoại lệ tùy chỉnh. Hãy xem ví dụ sau
Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
Trong ví dụ trên, chúng tôi đã dẫn xuất hai lớp ngoại lệ mới. EmptyEmailException và InvalidEmailException từ lớp cơ sở Ngoại lệ. Nhiều khối
Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
0 được sử dụng để hiển thị các thông báo lỗi khác nhau, tùy thuộc vào loại ngoại lệ được tạoVì các lớp ngoại lệ tùy chỉnh này kế thừa các thuộc tính và phương thức từ lớp Ngoại lệ nên chúng ta có thể sử dụng các phương thức của lớp Ngoại lệ như
Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
1, Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
4, Please enter your E-mail address!"];
}
// Throw exception if email is not valid
if[filter_var[$email, FILTER_VALIDATE_EMAIL] === FALSE] {
throw new InvalidEmailException["$email is not a valid E-mail address!
"];
}
// Display success message if email is valid
echo "SUCCESS: Email validation successful.
";
} catch[EmptyEmailException $e]{
echo $e->getMessage[];
} catch[InvalidEmailException $e]{
echo $e->getMessage[];
}
?>
3, v.v. để lấy thông tin lỗi từ đối tượng ngoại lệĐặt Trình xử lý ngoại lệ toàn cầu
Như chúng ta đã thảo luận trước đó trong chương này nếu không bắt được ngoại lệ, PHP sẽ tạo ra Lỗi nghiêm trọng với thông báo "Ngoại lệ chưa được bắt. " thông điệp. Thông báo lỗi này có thể chứa thông tin nhạy cảm như tên tệp và số dòng xảy ra sự cố. Nếu bạn không muốn hiển thị thông tin đó cho người dùng, bạn có thể tạo một hàm tùy chỉnh và đăng ký nó với hàm
Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
52 để xử lý tất cả các ngoại lệ chưa được phát hiệnCaught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
5Ghi chú. Một ngoại lệ chưa được phát hiện sẽ luôn dẫn đến việc chấm dứt tập lệnh. Vì vậy, nếu bạn muốn tập lệnh tiếp tục thực thi ngoài điểm xảy ra ngoại lệ, bạn phải có ít nhất một khối
Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
0 tương ứng cho mỗi khối Caught Exception!";
echo "Error message: " . $e->getMessage[] . "
";
echo "File: " . $e->getFile[] . "
";
echo "Line: " . $e->getLine[] . "
";
echo "Error code: " . $e->getCode[] . "
";
echo "Trace: " . $e->getTraceAsString[] . "
";
}
?>
7