一段代码了解 php 异常
<?php
/**
* 异常捕获:try 手动抛出异常 try {} 代码块会停止运行, 但是后续代码会继续执行, 自动抛出异常try代码块依旧会执行
* 错误捕获:可以通过 catch (Error $e) 捕获到错误
* 如果是 fatal error,废话,什么语言碰到 fatal error 还能继续执行?
* 异常捕获会向上冒泡,直到被捕获为止,并且会沿途执行所有的 finally 代码块
* 如果一直没有被捕获, 则会产生 fatal error
* catch 跟 throw 同时抛出同一种错误,则会捕获throw抛出的错误
*/
// 异常捕获:try 发生异常 try {} 代码块会停止运行, 但是后续代码会继续执行
// 如果是 fatal error,废话,什么语言碰到 fatal error 还能继续执行?
class MyException extends Exception
{
}
class ItException extends Exception
{
}
class HeException extends Exception
{
}
function inverse($x)
{
if (!$x) {
throw new MyException('Division by zero.');
}
return 1 / $x;
}
try {
// inverse1(1); // fatal error 整个脚本会停止, 可以通过 catch Error捕获到错误
// echo inverse(0) . "\n"; // warning级别 try {} 代码块会停止, 即不会输出 123
echo 1/0; // 系统抛出异常,后续依旧会输出123, 如果是手动抛出异常,系统则不会输出 123.
// throw new Exception('stop try');
echo 123;
echo inverse(5) . "\n";
} catch (Exception $e) {
echo 'Caught exception1`: ', $e->getMessage(), "\n";
}catch (Error $e) {
echo 'Caught exception1`: ', $e->getMessage(), "\n";
}
echo 1;
// 异常捕获会向上冒泡,直到被捕获为止,并且会沿途执行所有的 finally 代码块
try {
try {
// inverse1(1); // fatal error 整个脚本会停止
echo inverse(0) . "\n"; // warning级别 try {} 代码块会停止
echo inverse(5) . "\n";
} catch (ItException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}finally{
echo "First finally.\n";
}
} catch (MyException $e) {
echo 'Caught MyException: ', $e->getMessage(), "\n";
}
// catch 跟 throw 同时抛出同一种错误,则会捕获throw抛出的错误
try {
try {
// inverse1(1); // fatal error 整个脚本会停止
echo inverse(0) . "\n"; // warning级别 try {} 代码块会停止
echo inverse(5) . "\n";
} catch (MyException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
throw new MyException('catch MyException');
echo "after throw\n";
}finally{
echo "First finally.\n";
throw new MyException('finally MyException'); //如果存在则会使用finnaly 块的MyException
}
} catch (MyException $e) {
echo 'Caught MyException: ', $e->getMessage(), "\n";
}
// 异常捕获会向上冒泡,直到被捕获为止,并且会沿途执行所有的 finally 代码块
// 如果一直没有被捕获, 则会产生 fatal error
try {
try {
// inverse1(1); // fatal error 整个脚本会停止
echo inverse(0) . "\n"; // warning级别 try {} 代码块会停止
echo inverse(5) . "\n";
} catch (ItException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
} catch (ItException $e) {
echo 'Caught MyException: ', $e->getMessage(), "\n";
}
// 继续执行
echo "Hello World\n";
本作品采用《CC 协议》,转载必须注明作者和本文链接
大哥,格式稍微注意下啊