异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。当异常被触发时,通常会发生以下动作:
·当前代码状态被保存。
·代码执行被切换到预定义的异常处理器函数。
·根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本。
当异常被抛出时,其后的代码不会继续执行,PHP会尝试查找匹配的catch代码块。如果异常没有被捕获,而且又没有使用set_exception_handler()做相应的处理,就会发生一个严重的错误,并且输出Uncaught Exception(未捕获异常)的错误消息。
下面的实例抛出一个异常,同时不去捕获它。
【例9.6】
运行后结果如图9-9所示。由于没有捕获异常,因此出现了下面的错误提示消息。
如果想避免出现上面的错误,需要创建适当的代码来处理异常。处理异常的程序应当包括如下几个部分。
·try代码块:使用异常的函数应该位于try代码块内。若没有触发异常,则代码将照常继续执行。但是如果异常被触发,就会抛出一个异常。
·throw代码块:这里规定如何触发异常。每一个throw必须对应至少一个catch。
·catch代码块:catch代码块会捕获异常,并创建一个包含异常信息的对象。
【例9.7】
运行后结果如图9-10所示。由于抛出异常后捕获了异常,因此出现了下面的提示消息。
【案例分析】
(1)首先创建checkNum()函数,用于检测数字是否大于1。如果是,则抛出一个异常。
(2)在try代码块中调用checkNum()函数。
(3)checkNum()函数中的异常被抛出。
(4)catch代码块接收到该异常,并创建一个包含异常信息的对象($e)。
(5)通过从这个exception对象调用$e->getMessage(),输出来自该异常的错误消息。