php中的错误处理机制
admin
2023-06-23 05:41:20
0

1.如果没有错误处理机制会怎样?

 

案例1

 

结果

Warning: fopen(aa.txt) [function.fopen]: failed to open stream: No such file or directory in E:\Software_default\wamp_wwwroot\error\error01.phpon line 2

ok

 

来自 <http://localhost/error/error01.php>

 

改进

 

案例2

 

2.简单的die()语句

 

 die()语法结构等同于 exit().

 die处理错误三张方式:

1.使用简单的die()语句;

2.使用 file_exists("aaa.txt") or die("no file");

 

使用die()处理以上例子

 

案例3

 

或者更简洁的写法

 

案例4

3.创建自定义函数处理错误

 

      php中,如果出现错误,会启动默认机制处理错误的方式来处理错误。如案例1,如果没有存在aa.txt,php将提示

Warning: fopen(aa.txt) [function.fopen]: failed to open stream: No such file or directory in E:\Software_default\wamp_wwwroot\error\error01.php on line 2

 

因此我们可以自定义错误方式来代替php默认错误机制

(1).创建自定义错误函数

函数必须有能力处理至少两个参数(error level , error message),但是可以接受最多5个参数(可选:flie,line-number,error context

(2).基本语法

A .error_function(error_level ,error_message,error_flie,error_line,error_context)

B .同时改写 set_error_handle("error_function",错误级别),错误级别如下图:

php中的错误处理机制

其中,出现warning时,不会暂停脚本运行

案例5

错误级别:".$errno."
";  echo "错误信息:".$errmes;  }  set_error_handler("my_error",E_WARNING);  echo "测试打开aaa.txt
";  $fp=fopen("aaa.txt","r");//打开文件 ?>

4.错误触发器

 

      需求:有一段代码,如果input接受一个年龄,假如年龄大于100,我认为是一个错误。

//传统方法:

案例6

If($age>100)

{

  echo "too old";

  exit();

}

现在可以使用自定义错误触发器

案例7

";
 
 if($age>100)
 {
 trigger_error("年龄太大");
 exit();
 }
?>

结果:

age:700

 

Notice: 年龄太大 in E:\Software_default\wamp_wwwroot\error\error05.phpon line 7

 

来自 <http://localhost/error/error05.php>

从案例7,我们可以发现,使用了trigger_error(),相当于触发了一个错误,从而调用php默认错误提示机制,因此,在此情况下,还可以进行改写错误函数,即自定义错误函数。

 

其中,trigger_error()里有两个参数,trigger_error("error_msg",error_type),默认为E_USER_NOTICE,可选有:

E_USER_WARNING,E_USER_ERROR,根据需求选择。

 

注意:此处的错误级别通常为:E_USER_WARNING,E_USER_NOTICE,E_USER_ERROR

根据需求选择适当类型,由于案例7出现notice错误,所以此处,我们应该选择E_USER_NOTICE

案例8

错误级别:".$erroro."
";    echo "错误信息:".$erromes;   }  set_error_handler("age_error",E_USER_NOTICE);//错误级别通常为:E_USER_WARNING,E_USER_NOTICE,E_USER_ERROR    $age=700;  echo "age:".$age."
";    if($age>100)  {  trigger_error("年龄太大,大于120");//默认是E_USER_NOTICE  exit();  }   ?>

结果如下:

age:700

错误级别:1024

错误信息:年龄太大,大于120

 

来自 <http://localhost/error/error06.php>

 

 

 

 


相关内容

热门资讯

古巴外长:古美双边谈判没有取得... △古巴外交部长罗德里格斯(资料图)当地时间5月28日,古巴外交部长布鲁诺·罗德里格斯表示,古巴与美国...
伊朗最高领袖强调维护民族团结 伊朗最高领袖穆杰塔巴28日发表书面讲话,强调维护民族团结与社会凝聚力,并呼吁伊朗各界共同维护国家统一...
消息称字节跳动正开发自有CPU... IT之家 5 月 28 日消息,据路透社援引三名知情人士消息称,由于芯片价格持续上涨、供应短缺时间拉...
李咏瑾: “科技的省心”,会不... “科技的省心”会不会日益造就人们“判断的懒惰”? 近日,两条有关“AI成为投诉对象甚至被告”的新闻,...
一卷胶带如何“撕”出诺贝尔奖?... 一层原子厚的材料,能有多神奇?日前,“追星就追科学家”校园公益科普活动邀请上海交通大学物理与天文学院...
广发银行多项成果入选“十四五”... 近日,第八届金融科技创新大会暨CITE2026人工智能与金融数智化创新发展论坛正式发布了“十四五”金...
人工智能如何构建伦理治理体系?... 5月28日,“智能时代的自主知识体系构建暨人工智能伦理与社会实验室建设学术研讨会”在华南师范大学举行...
前5个月地方债发行约4.8万亿 作者 | 第一财经 陈益刊在地方财政收支矛盾较大背景下,为了稳投资、防风险,地方政府靠前发行政府债券...
美军司令叫嚣:韩国是插向中国的... 驻韩美军司令布伦森用他狂妄的臭嘴描述“韩国就像一把指向中国的匕首”,引起轩然大波。布伦森本周二做客美...
凤凰晚报丨美国牡蛎养殖场,走出... 今日人物【美国牡蛎养殖场,走出一位特朗普“平替”】2026年5月,在美国缅因州波特兰举行的一场州民主...