这几天面试,面试官都会提到PHP异常处理这个问题,可见异常处理在项目中是多麽的重要,不仅要了解,还要理解,甚至会用
什么是异常(Exception)?
在指定的异常发生时,改变脚本的正常流程,这就叫异常
如何处理异常?
PHP5提供了一种新的面向对象的异常处理方法
我们先来了解一下,通常异常发生时会出现那些状态:
- 当前代码状态被保存
- 代码执行被切换到预定义的异常处理器函数
- 根据情况,处理器可能会从保存的代码状态,重新执行代码,终止脚本执行,,或从代码中另外的位置继续执行代码
处理异常
我们需要创建一个专门的类,当PHP出现异常时,可调用其函数
我们先来认识几个函数:
- Try(): 使用异常的函数应该位于 “try” 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
- Throw(): 这里规定如何触发异常。每一个 “throw” 必须对应至少一个 “catch”
- Catch(): “catch” 代码块会捕获异常,并创建一个包含异常信息的对象
- Set_error_handler(): 用于捕捉错误,设置一个用户自定义的错误处理函数
- Register_shutdown_function(): 捕获PHP的错误:Fatal Error、Parse Error等,这个方法是PHP脚本执行结束前最后一个调用的函数,比如脚本错误、die()、exit、异常、正常结束都会调用.通过这个函数就可以在脚本结束前判断这次执行是否有错误产生,这时就要借助于一个函数:error_get_last();这个函数可以拿到本次执行产生的所有错误。error_get_last();返回的信息:
[type] - 错误类型
[message] - 错误消息
[file] - 发生错误所在的文件
[line] - 发生错误所在的行 - Set_exception_handler(): 设置默认的异常处理程序,用在没有用try/catch块来捕获的异常,也就是说不管你抛出的异常有没有人捕获,如果没有人捕获就会进入到该方法中,并且在回调函数调用后异常会中止
异常处理的执行顺序:
异常的代码放在try代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会抛出一个异常。Catch代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。
详细的代码实现,下次再补上