V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
baiyi
V2EX  ›  PHP

请问,PHP 如何合理的使用异常捕获

  •  
  •   baiyi · 2016-10-27 15:18:20 +08:00 · 2792 次点击
    这是一个创建于 2949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到了一篇文章 https://laravel-china.org/topics/2460

    但却有些不理解的地方

    例如说:一个 update 操作或者 delete 操作,应该是捕获异常还是 ifelse 判断

    应该如何正确的使用 PHP 的捕获异常?

    9 条回复    2016-10-27 17:28:30 +08:00
    fuxkcsdn
        1
    fuxkcsdn  
       2016-10-27 17:11:12 +08:00   ❤️ 1
    上 php 7 ,可以全部用异常捕获(Exception 和 Throwable)

    php 5 的话,可以参考一下文档,然后全部用异常捕获( Exception )
    http://php.net/manual/en/function.set-error-handler.php
    http://php.net/manual/en/pdo.error-handling.php
    audi
        2
    audi  
       2016-10-27 17:13:31 +08:00   ❤️ 1
    从调用方来讲:调用一个方法,如果不能返回预期结果,是期望抛出一个异常的。而不是其他 -1 -2 之类的特殊值。
    baiyi
        3
    baiyi  
    OP
       2016-10-27 17:18:03 +08:00
    @fuxkcsdn 为什么要全部使用异常捕获呢,有什么优点? 我是在框架内开发的,框架是有自己的异常捕获的,我需不需要在控制器内使用异常捕获呢
    fuxkcsdn
        4
    fuxkcsdn  
       2016-10-27 17:20:10 +08:00   ❤️ 2
    BTW , update 或 delete 操作既要 catch 也要 if else

    try {
    这里是关于 update 或 delete 执行成功或失败的逻辑,如
    update user set active = 0 where id=123 and active = 1;
    影响行数可能是 0 也可能是 1 ,这就得用 if else 来判断, delete 同理
    } catch (Exception $e) {
    这里 catch 的更多的是服务器错误或者 SQL 语法错误(不应该发生,至少在测试阶段就应该消灭掉这类错误)
    比如 SQL 服务器突然挂掉,或者连接超时,或者某个命令导致服务器 CPU 占用 100%导致命令执行超时
    或者哪个 SB 线上修改了表结构
    }
    baiyi
        5
    baiyi  
    OP
       2016-10-27 17:20:46 +08:00
    @audi 那么对于接口的调用方呢,能接受 500 错误还是我捕获后告诉他"xxx 错了"
    baiyi
        6
    baiyi  
    OP
       2016-10-27 17:22:20 +08:00
    @fuxkcsdn 明白啦!感谢!
    odirus
        7
    odirus  
       2016-10-27 17:23:26 +08:00   ❤️ 1
    在 PHP5 里面捕获全部异常是一个伤心的话题

    所以现在我基本用 Java 了
    fuxkcsdn
        8
    fuxkcsdn  
       2016-10-27 17:26:15 +08:00   ❤️ 1
    @baiyi 框架自己的异常捕获更多是为了让你调试方便的...不是让你抛出异常给最终用户的....
    baiyi
        9
    baiyi  
    OP
       2016-10-27 17:28:30 +08:00
    @fuxkcsdn 嗯,明白了,最终不能直接返回异常给用户
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2733 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:55 · PVG 22:55 · LAX 06:55 · JFK 09:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.