11月10日:php错误和异常处理

 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。

使用场景主要如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值