抛出异常当返回使用方法php,TP模型中是返回还是抛出异常

你只是想返回一个结果,但使用 throw 一般是抛出异常。

很多时候返回 status 为0,其实并不是异常。

我觉得这些时候使用 throw 是不合适的。

所谓的异常,应该是“它本来应该是这样的,但结果却不是”,才需要抛出异常。

比如你要处理一张图片,传的参数指向的文件存在,文件后缀也存在,但读取数据后却不能正确处理,这时抛个异常是可以理解的,但我个人觉得这还不够好。

因为我就遇到过,使用 thinkPHP 3.2 的图片处理类,遇到不能处理的图片,直接抛出了异常,但其实对我来说,如果处理图片有问题 ,是可以直接跳过去的。

也就是说:只有“这一步如果出错,后面的代码执行就完全没有意义或者完全不能执行”的时候才去抛出异常,否则只需要返回结果,给使用者(可能是控制器)去处理就好了。

对于楼主的需求,ThinkPHP 是有内置的方法的,比如控制器中有 success() 和 error() 两种方法来满足楼主的需要,当然,我个人比较喜欢 ThinkPHP 3.2的处理方式,比如简洁,ThinkPHP 5中的这两个方法添加了不必要的参数,写起来倒挺麻烦的。

但这两个方法只在控制器中有,模型中默认是没有的,当然,如果你喜欢的话,也可以加到模型中去。

但我个人同样不太推荐。处理返回结果或页面跳转的任务还是交给控制器会比较好。

模型中,其实可以自己定义个类似的方法,比如:

function succ($data="",$status=1){

return array(

'status'=>$status,

'info'=>$data,

);

}

function error($msg=""){

return succ($msg,0);

}

你在模型中直接 return succ($data);或 return error($msg);即可。

控制器中根据返回的数组,再使用$this->success()或$this->error();当然,如果你在使用ThinkPHP 5,也像我一样比较喜欢 ThinkPHP 3.2 的风格,这两个方法你是可以改成3.2的风格的。

说回楼主和你看到的大神的代码,基本思想都差不多,只不过你直接返回一个数组,而“大神”却直接抛出异常,我不喜欢这位大神的风格。

但你和“大神”都喜欢写重复的 "status'=>1,"msg"=>......,我则比较喜欢把它装进函数或方法中,毕竟这两个操作是使用非常频繁的。

关于代码中较多 if/else 的情况,我一般使用两种方法解决:

短的判断可以用三目运算符代替;

很多时候 if 时使用了return ,后面就可以不写 else 了 。

补充:

概括一下:

模型中建议使用 return ,而不是抛出异常,return 的数据可以自己封装个函数或方法;(当然,要结合业务的具体需求!)

抛出异常意味着程序的终止,在非必须的情况下不要这样做;

控制器中直接使用 success 和 error 或 ajaxReturn 方法即可。

但如果把楼主看到的“大神”的代码从模型中移到控制器的话,应该是合理的(除了重复的代码有点多外)。

我个人是不太喜欢使用 throw,但我查看了一下 ThinkPHP 5 和 ThinkPHP 3.2 的源码,其中的 success和 error 方法除了使用参数复杂性不同外,还有一点区别就是 3.2直接使用 exit()结束程序,而 5.0 版本中使用的是 throw 一个异常类。

应该有理由相信,使用 throw 可能会比如说 exit 更好。

于是,我找到一种说法:

我不了解底层的机制,但我觉得这种说法是比较可信的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值