Home > Article > Backend Development > 大家对PHP的异常是什么态度
如题,大家是否会使用PHP的异常,如何使用
网上一些文章,都是介绍语法,没有分享如何真正用好PHP的异常的.
感觉PHP的异常机制不如C++/Java等的好用.
如题,大家是否会使用PHP的异常,如何使用
网上一些文章,都是介绍语法,没有分享如何真正用好PHP的异常的.
感觉PHP的异常机制不如C++/Java等的好用.
由于历史原因PHP很多内置函数都是没有异常,而是通过返回false/-1之类的来表达异常,导致开发者也习惯于采用返回值而非异常来区分(而且php函数的返回值和数组都是那么灵活)
说完不采用异常的理由(虽然没有说全),再来说说为什么异常还是值得使用的。首先需要说明的是,仅考虑语法方面,最新版本的PHP的异常,已经和JAVA等没有区别了。
1. 更丰富的错误信息。使用false/-1之类的返回值,只能让我们知道发生了异常,但不能知道发生了什么异常。即使通过给不同的异常返回不同的状态码,依然不如异常类直观。我们可以通过异常本身的类名来判断是什么异常,通过异常类的message来保存更详细的解释说明,最重要的是,我们可以通过异常的错误栈来判断是哪个文件第几行什么函数发生了问题,谁去调用的它。
2. 保证调用者处理异常。如果你的函数返回的是普通的值,可能出于疏忽,也有可能出于版本兼容问题(调用者根据你的老版本的函数进行开发,而你在新版本的函数里有了新的错误状态码)等情况,调用者忽略了你所返回的错误,那可能造成整个程序存在一些难以发现源头的问题。而异常则保证了调用者必须去处理。
3. 使你的代码逻辑更清晰。设想如果没有finally,针对每次返回都检测异常,并且在每个异常后写一遍释放资源是多么蛋疼的事情。
我自己写的框架是通过捕捉异常来显示错误页面的,其他地方我倒是基本不用异常。
try { require_once($some_file_path); } catch(exception $e) { $smarty->assign("error", $e->getMessage()); $smarty->display("error.tpl"); }