购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.5 错误控制

PHP 5中,异常信息的基类为Exception,而PHP 7中会作为错误进行捕捉,基类为Error类,而Exception和Error类型都实现了Throwable接口。

本节将介绍错误的处理,稍后学习面向对象编程、接口等相关内容。

4.5.1 try…catch语句结构

try…catch语句结构的基本结构如下。

    try
    {
    }
    catch(<异常或错误>)
    {
    }
    finally
    {
    }

其中,try语句块中包含了可能出错的代码,当代码执行出现问题时,可以由catch语句块捕捉并处理;最后,无论代码是否出错,都会执行finally语句块的代码。

下面的代码展示了try…catch… finally语句结构执行过程。

代码执行结果见图4-7。

图 4-7

本例中,在try语句块中通过throw语句抛出了一个异常对象,此异常会被catch语句捕捉并处理。这里使用了通用的异常类型,定义为Exception类,常用成员包括:

● getMessage()方法,给出异常信息。

● getPrevious()方法,给出前一个异常对象。

● getCode()方法,给出异常代码。

● getFile()方法,返回发生异常的文件名。

● getLine()方法,返回发生异常的行号。

● getTrace()方法,返回一个包含了跟踪执行信息的数组。

● getTraceAsString()方法,返回一个包含了跟踪执行信息的字符串。

PHP 7中,大量的错误由Error及相关类型定义。下面的代码使用Error对象来捕捉程序中的运行错误。

代码执行结果见图4-8。

图 4-8

4.5.2 throw语句

因为try…catch语句结构中不能自动抛出和捕捉致命错误(Fatal Error),所以,当一些错误的出现影响代码继续执行时,需要对关键的数据进行检查,并在需要的时候使用throw语句抛出异常或错误,此时的异常或错误对象可以由catch块捕捉。

throw语句抛出的异常或错误对象可以是具体的类型,也可以是通用的Exception或Error对象,这些异常或错误对象会由同级的catch语句块捕捉和处理;如果catch语句块中无法处理,可以选择终止代码或向上一级继续抛出异常。下面的代码会在页面中显示错误信息。

代码执行结果见图4-9。

图 4-9

4.5.3 错误抑制

错误抑制符(@)放在可能出现错误的语句前面,当语句执行错误时,并不会抛出错误信息,而是继续执行。

使用错误抑制的主要场景包括:

● 代码可能会出错,但可以通过其他方式获取错误信息,并更加有效地处理。例如,在连接MariaDB数据库出现问题时,可以使用mysqli对象中的connect_error属性获取错误信息,也可以通过connect_errno属性获取错误代码。

● 某些语句执行错误并不影响后续代码的执行,此时可以忽略错误,让代码继续执行。 gqe7mralpxrQeky8aie/m32Oc8V7cP3B0qbo/opYoOFXxZXkvUPtIWd/SfRhDq8T

点击中间区域
呼出菜单
上一章
目录
下一章
×