PHP 的 try catch 不能捕捉到 closure(闭包)里的异常嘛? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
selfcreditgiving

PHP 的 try catch 不能捕捉到 closure(闭包)里的异常嘛?

  •  
  •   selfcreditgiving Sep 10, 2019 2418 views
    This topic created in 2424 days ago, the information mentioned may be changed or developed.

    我就是想封装一下 try catch,不用每次都写一遍 catch 自定义异常 和 未知异常。
    但是下面的 getResult() 里的异常捕捉不到,是什么原因?
    不用 mytry, 直接用 try catch 包起来写就能捕捉到。

     class CusMsgException extends Exception { // 空的就可以,主要是要这个异常的名字 } function mytry($fn) { try { $result = $fn(); return $result; } catch (CusMsgException $e) { echo "自定异常: ".$e->getMessage().PHP_EOL; } catch (Exception $e) { echo "未知异常: ".$e->getMessage().PHP_EOL; } } function getResult() { throw new CusMsgException("ffff"); return "数据"; } mytry(function () { $result = getResult(); echo $result; }); 
    6 replies    2019-09-10 22:34:18 +08:00
    Fishdrowned
        1
    Fishdrowned  
       Sep 10, 2019
    selfcreditgiving
        2
    selfcreditgiving  
    OP
       Sep 10, 2019
    @Fishdrowned 确实是可以,,, 实际代码是用 laravel 写的,这段是为了提问抽出来写的,奇怪,laravel 的代码捕捉不到,单独执行的代码就可以了。 我再看看
    ipwx
    &nsp;   3
    ipwx  
       Sep 10, 2019
    @selfcreditgiving 你调用的“mytry”是不是 Laravel 的 mytry,而它不立刻执行你给的函数的?
    lshero
        4
    lshero  
       Sep 10, 2019
    set_exception_handler 不好用嘛?
    你看一下异常是不是被 app/Exceptions/Handler.php 里面的方法接管了
    Fishdrowned
        5
    Fishdrowned  
       Sep 10, 2019
    @lshero exception handler 的优先级在 try/catch 之后,应该不是这个问题。

    估计调用栈里面有更接近的 try/catch 拿走了。

    也可能是有拼写错误,调用错方法了,拼写错误造成的离奇 bug 不少见。
    autoxbc
        6
    autoxbc  
       Sep 10, 2019 via iPhone
    感觉这里提闭包属于名词误用
    About     Help     Advertise     Blog     API     FAQ     Solana     2632 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 03:29 PVG 11:29 LAX 20:29 JFK 23:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86