PHP错误和异常处理
错误的分类
- 语法错误
这种错误是最常见的错误,而且这种错误也是最容易修复的错误
- 运行错误
这种错误往往是指算法(所谓算法,就是指解决问题的方法)有问题,造成了内存泄漏。这种错误在刚开始的时候是不会阻止程序的运行的,但是随着程序运行的时间的增长,程序最终造成崩溃
- 逻辑错误
这种错误往往是最麻烦的,它不会阻止程序的运行,而且也不会显示错误信息
上面的错误,本来是想在$i等于5的时候输出World,但是由于错写了==,所以永远只会输出Hello
PHP中错误的级别
在PHP中,错误会被被分成不同的等级的,如下图:
这里首先回顾一个函数gettype(),用于获取变量的类型
利用该函数来得到不同的错误类型
效果:
总结:从上面的实验可以看到,notice和warning级别的错误不会影响下面脚本的执行,但是error级别的错误,会影响脚本的执行
调整PHP中的错误级别
所谓调整PHP中的错误级别,就是指显示自己需要的错误报告
步骤如下:
- 打开PHP的配置文件,移动到error_reporting的位置
- 将error_reporting的值修改为自己想要的错误报告级别
需要注意的是不要将原来的配置文件的值修改,而是将其注释掉,然后在下面重新书写自己的值。好处在于一旦出现什么问题,可以快速的还原原来的配置
- 重启apache
需求:显示除了E_NOTICE以外的错误类型
有一个~的符号,代表除了该级别以外
效果:
虽然上面我们是通过修改配置文件的方式来修改的错误级别报告,但是,一般来讲,配置文件是不允许轻易修改。所以,在PHP里面,还专门给我们提供了一个函数error_reporting
效果:
效果:
trigger_error()函数
该函数是用来自定义错误类型的。该函数可以抛出一个自定义的错误信息。
这个函数接收两个参数(要抛出的错误信息,错误等级)
效果:
自定义错误处理
这个是指自定义错误报告怎么处理。系统默认的错误报告处理的方式为:哪里出错,立马把错误报告显示出来。
Set_error_handler(),该函数可以接收两个参数,第一个参数是一个错误报告处理的回调函数,第二个参数是可选的,是定义哪一种错误级别使用该自定义函数。
效果:
需要注意的是:fatal error级别的错误,属于重大错误。系统是不可能将这么重大的错误交给用户自定义函数来处理的
效果:
Set_error_handler函数的第二个参数为指定哪一种级别使用自定义函数,默认是E_ALL
效果:
错误日志
对于PHP开发者来讲,如果一旦项目上线,那么肯定是不能显示任何的错误报告的。但是虽然不显示,并不代表没有错误。这个时候就需要将错误报告写在错误日志里面
关闭错误报告:在PHP配置文件里面,有一个display_errors,默认值为On,将其修改为Off就可以了
虽然关闭了错误报告显示,但是并不代表没有错误,我们需要将错误报告写在错误日志里面,如果要写错误日志,需要先将PHP配置文件里面的log_errors开启,默认就是开启了的
有一个error_log条目:用来指定错误日志存储的位置
接下来一旦有错误发生,错误报告就会被写入到指定的文件里面
错误日志:
需要注意的是:错误日志的路径是可以根据自己的实际需求来进行修改的
异常处理
异常和错误并不是同一个东西。异常是指一个程序在运行过程中出现一个意外或者事件。中断了正常指令的执行,跳转到了其他模块继续执行。
在PHP里面,异常处理使用try…catch…
Try:代表尝试执行,并且捕获异常
Catch:代表异常出现时的补救方案
异常是通过throw关键字来抛出的。抛出异常以后,throw下面的代码是不会被执行的,会直接进入catch这个补救措施
如果想要看到异常的信息
可以通过getMessage()方法来进行查看
注意点:需要进行异常捕获的代码,必须写在try代码块里面,try和catch是成对出现,并且try和catch之间不能有任何的其他代码

浙公网安备 33010602011771号