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

2016-10-27 15:18:20 +08:00
 baiyi

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

但却有些不理解的地方

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

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

2664 次点击
所在节点    PHP
9 条回复
fuxkcsdn
2016-10-27 17:11:12 +08:00
上 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
2016-10-27 17:13:31 +08:00
从调用方来讲:调用一个方法,如果不能返回预期结果,是期望抛出一个异常的。而不是其他 -1 -2 之类的特殊值。
baiyi
2016-10-27 17:18:03 +08:00
@fuxkcsdn 为什么要全部使用异常捕获呢,有什么优点? 我是在框架内开发的,框架是有自己的异常捕获的,我需不需要在控制器内使用异常捕获呢
fuxkcsdn
2016-10-27 17:20:10 +08:00
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
2016-10-27 17:20:46 +08:00
@audi 那么对于接口的调用方呢,能接受 500 错误还是我捕获后告诉他"xxx 错了"
baiyi
2016-10-27 17:22:20 +08:00
@fuxkcsdn 明白啦!感谢!
odirus
2016-10-27 17:23:26 +08:00
在 PHP5 里面捕获全部异常是一个伤心的话题

所以现在我基本用 Java 了
fuxkcsdn
2016-10-27 17:26:15 +08:00
@baiyi 框架自己的异常捕获更多是为了让你调试方便的...不是让你抛出异常给最终用户的....
baiyi
2016-10-27 17:28:30 +08:00
@fuxkcsdn 嗯,明白了,最终不能直接返回异常给用户

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/315886

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX