try catch

<?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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值