<?php
class NotException extends Exception {
}
class NotParamException extends Exception {
}
//try内部正常执行try的内部逻辑,异常则执行catch的内部逻辑结构
//但是不管执行的哪个都会执行完try catch的内部逻辑(非return)后执行finally的内部逻辑。
//
//如果try catch都有return,按照正常执行,然后执行finally的逻辑,再返回对应的try 或者catch里执行return。
//
//如果try catch finally都有return,执行完finally的逻辑后,会调用finally的return。
function testTry($type = ''){
$i = 0;
try {
$i= $i+1;//1
if($type === 'NotParamException'){
throw new NotParamException('NotParamException');
}
if($type === 'NotException'){
throw new NotException('NotException');
}
return $i . '123';//1123
//$i=1 finally内的计算不会有影响
//多个catch顺序执行,Exception先捕获
//try和catch里的return会先执行finally后再执行
//只要有finally,就一定会执行,即使try和catch有return
//只要finally有return,try和catch的return无效
//} catch (Exception $e) {
// //不会执行 NotException 和 NotParamException
// echo "Exception\r\n";
// return "Exception";
} catch (NotException $e) {
$i= $i+2;
echo "$i\r\n";
echo "NotException\r\n";
return "NotException"; //没有return返回end
} catch (NotParamException $e) {
$i= $i+2;
echo "$i\r\n";
echo "NotParamException\r\n";
return "NotParamException";
} catch (Exception $e) {
//放最后 NotException 和 NotParamException能执行
$i= $i+2;
echo "$i\r\n";
echo "NotParamException\r\n";
return "NotParamException";
} finally {
$i= $i+2;
echo "$i\r\n"; //3 、 5
if($type === 'finally'){
return "finally";
}
}
return 'end';
}
var_dump(testTry());
echo "\r\n";
var_dump(testTry('NotParamException'));
echo "\r\n";
var_dump(testTry('NotException'));
echo "\r\n";
var_dump(testTry('finally'));
//3
//string(4) "1123"
//
//3
//NotParamException
//5
//string(17) "NotParamException"
//
//3
//NotException
//5
//string(12) "NotException"
//
//3
//string(7) "finally"
try catch
最新推荐文章于 2023-06-16 16:55:37 发布