php程序的错误发生一般归属于下列三个领域:
- 语法错误:会阻止脚本的执行。
- 运行时错误:一般不会阻止php脚本的执行,但会阻止当前要做的事情,输出一条错误,但php脚本会继续执行。
- 逻辑错误:既不阻止脚本的执行,也不输出错误消息。
错误报告级别
调整错误报告级别
1、display_errors:是否开启php输出错误报告的级别。
值为:On (默认的输出错误报告)、Off (屏蔽所有的错误信息)
-- 在php脚本中可以调用ini_set( ) 函数,动态设置php.ini配置文件。
-- 如:ini_set("display_errors", "On"); 显示所有的错误信息
2、error_reporting: 设置不同的错误级别报告
error_reporting = E_ALL & ~E_NOTICE
-- 可以抛出任何非注意的错误
error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR
-- 只考虑致命的运行时错误,新解析错误和核心错误。
error_reporting = E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)
-- 报告用户导致的错误之外的所有错误。
在php脚本可以通过error_reporting() 函数动态设置错误报告级别。
如:error_reporting(E_ALL);
<?php
//php的错误和异常处理
/*
调整错误级别
0:代表false,1:代表true。
*/
//ini_set('display_errors',1); //打开错误报告
//ini_set('display_errors',0); //关闭错误报告,在运行中不会进行报错
//echo $a;
//error_reporting(E_ALL); //将会向php报告发生的每个错误
//error_reporting(E_ALL&~E_NOTICE); //向php报告除了notice之外的所有错误
echo '<h2>测试错误报告</h2>';
ini_set('display_errors',1);
error_reporting(E_ALL);
echo $a; //模拟notice错误
require('aaa.php'); //模拟致命错误和运行时警告
?>
<?php
echo '<h2>测试错误报告</h2>';
ini_set('display_errors',1);
//error_reporting(E_ALL);
error_reporting(E_ALL&~(E_WARNING|E_NOTICE)); //向php报告除了warning和notice之外的所有错误
echo $a; //模拟notice错误
require('aaa.php'); //模拟致命错误和运行时警告
?>
异常处理:
一个异常(Exception)则是在一个程序执行过程中出现的一个例外或是一个事件,他中断了正常指令的运行,跳转到其他程序模块继续执行。
例如:每个汽车都有“备胎”,只有当汽车其他轮胎受损时,才会将备胎换上,让汽车继续正常行驶。
异常处理,就是提前预知程序可能在某些情况下会出现问题,提前写好解决方案,当对应出现的问题出现后进行“应急”,才不会导致程序崩溃。
<?php
//php的异常处理
try{
echo $var; //try{其中放入需要处理异常}
}catch(Exception $e){ //catch是用来捕获异常
echo $e->getMessage(); //对捕获的异常进行处理
}
echo 'Hello World!'; //程序没有崩溃,继续向下执行
?>
php异常详解:php异常处理类Exception用法详解-php教程-PHP中文网https://www.php.cn/php-weizijiaocheng-371745.html
新的finally关键字:
从php5.5开始支持finally关键字,放在catch后使用,不论是否捕获到异常,finally中代码都会执行。
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }
需要注意的是如果 finally 里包含 return,那么会覆盖 try 或 catch 里的return。
使用场景主要如下: