在 php 下面的异常,真的一言难尽啊。网上关于 php 关于异常的使用,也是寥寥无几。最近在学习 java,看到书(java 核心编程 卷 1)写关于异常的使用建议,觉得还是不错。
为什么要使用异常?传统的处理方式是返回一个特定的错误的答案,调用这个方法的方法对其进行分析。但是并不是在任何情况下都能够返回一个错误编码。有可能无法明确的将有效数据与无效数据区分。一个返回整形的方法就不能简单地通过返回 - 1 表示错误,因为 - 1 很可能是一个完全合法的结果
突然想到一点,吐个槽:php 接收数据,偷点懒,这么写 empty($_GET[‘a’])。但是如果传过来是 0,那么程序就出错了。好像用 mysqli 的时候后,会有三个返回值,如果简单用的 empty,也会有问题。
1 异常处理不能代替简单的测试,在 java 中,与执行简单的测试相比,捕获异常所花费的时间大大超过前者。
理解:不能总是依靠异常来处理问题,如果可以在通过简单的判断,就能够避免。比如,对于分页,page,size。如果没有传,那么可以直接赋值 page =1,size = 0;
2 不要过分地细化异常
3 利用异常层次结构
理解:2,3 感觉可以放在一起理解,使用合理的异常结构,合理的异常类。这个地方有点像是程序的扩展性,可读性和效率上的平衡,比如代码的长度,如果一个函数里面的代码过长,可以抽出一些内容作为一个方法,再去调用它。
4 不要压制异常
理解:捕获到异常而不去处理它。这样会压制异常。
5 在检测错误时,苛刻要比放任更好
理解:在有错误发生时,尽量还是抛出一个异常比直接抛出一个 null 或者自定义的类型要好。但是我觉得如果可以用默认值去处理,像 1 中分页的例子,而不是让程序中断。我觉得这样在某些情况下,会更好一点。
6 不要羞于传递异常
理解:未必非要在函数中捕获异常,也可以将它抛出,由高层次的函数通告用户发生错误。php 好像没有这种写法,- -。
如果有理解不正确的地方,希望可以指出。