



PHP 5中,异常信息的基类为Exception,而PHP 7中会作为错误进行捕捉,基类为Error类,而Exception和Error类型都实现了Throwable接口。
本节将介绍错误的处理,稍后学习面向对象编程、接口等相关内容。
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
因为try…catch语句结构中不能自动抛出和捕捉致命错误(Fatal Error),所以,当一些错误的出现影响代码继续执行时,需要对关键的数据进行检查,并在需要的时候使用throw语句抛出异常或错误,此时的异常或错误对象可以由catch块捕捉。
throw语句抛出的异常或错误对象可以是具体的类型,也可以是通用的Exception或Error对象,这些异常或错误对象会由同级的catch语句块捕捉和处理;如果catch语句块中无法处理,可以选择终止代码或向上一级继续抛出异常。下面的代码会在页面中显示错误信息。
代码执行结果见图4-9。
图 4-9
错误抑制符(@)放在可能出现错误的语句前面,当语句执行错误时,并不会抛出错误信息,而是继续执行。
使用错误抑制的主要场景包括:
● 代码可能会出错,但可以通过其他方式获取错误信息,并更加有效地处理。例如,在连接MariaDB数据库出现问题时,可以使用mysqli对象中的connect_error属性获取错误信息,也可以通过connect_errno属性获取错误代码。
● 某些语句执行错误并不影响后续代码的执行,此时可以忽略错误,让代码继续执行。