传智播客 韩顺平 php从入门到精通 7999讲异常处理与进阶课堂笔记.docx
《传智播客 韩顺平 php从入门到精通 7999讲异常处理与进阶课堂笔记.docx》由会员分享,可在线阅读,更多相关《传智播客 韩顺平 php从入门到精通 7999讲异常处理与进阶课堂笔记.docx(40页珍藏版)》请在冰豆网上搜索。
![传智播客 韩顺平 php从入门到精通 7999讲异常处理与进阶课堂笔记.docx](https://file1.bdocx.com/fileroot1/2022-11/16/1bc0a095-5fb2-481c-b118-8f6e6ce6714a/1bc0a095-5fb2-481c-b118-8f6e6ce6714a1.gif)
传智播客韩顺平php从入门到精通7999讲异常处理与进阶课堂笔记
php中错误和异常处理的机制
如果没有错误处理机制怎样?
php
//打开文件-
$fp=fopen(“aaa.txt”,”r”);
echo“ok”;
?
>
上面的代码没有处理错误,应当这样写程序更加健壮.
php
//$fp=fopen("aaa.txt","r");
//echo"ok";
//1.判断文件是否存在.
//2.绝对路径和相对路径
if(!
file_exists("aaa.txt")){
echo"文件不存在!
";
exit();
}else{
$fp=fopen("aaa.txt","r");
echo"文件打开成功";
//....关闭
fclose($fp);
}
?
>
解释了一下绝对路径和相对路径
php处理错误的三种方法
1. 使用简单的die语句
使用方法如下:
(1)
if(!
file_exists("aaa.txt")){
die("文件不存在");
}else{
//打开文件操作
}
echo"ok";
(2)更简单的方法
file_exists("aaa.txt")ordie("文件不存在!
!
!
");
5 分钟前上传
下载附件(53.76KB)
用户自定义错误处理器
在php中对错误有不同的级别区分:
2 分钟前上传
下载附件(48.24KB)
案例入门:
php
//定义了一个函数(我用于处理错误的函数)
functionmy_error($errno,$errmes){
echo"$errno
";
echo"错误信息是:
";
exit();
}
//改写set_error_handler处理器
//下面这句话的含义是:
如果出现了E_WARNING这个级别的错误,就去调用my_error函数.
set_error_handler("my_error",E_WARNING);
$fp=fopen("aa.txt","r");
?
>
原理图:
2 分钟前上传
下载附件(45.49KB)
错误触发器
需求:
有一段代码:
如果接受一个年龄,如果年龄输入>120,我认为就是一一个错误.
//传统的方法
if($age>120){
echo“年龄过大”;
exit();
}
//需求,输入一个薪水,如果大于10000,我认为有是错误.
if($salary>10000){
echo“薪水多”;
exit();
}
1现在我们可以使用自定义错误触发器来完成!
快速入门案例:
//自定义错误函数
function my_error3($errno,$errmes){
echo"错误号是:
".$errno;
}
functionmy_error4($errno,$errmes){
echo"出大事了".$errno;
exit();
}
//指定E_USER_WARNING错误级别的函数
set_error_handler("my_error3",E_USER_WARNING);
set_error_handler("my_error4",E_USER_ERROR);
$age=700;
if($age>120){
//调用触发器,时候同时指定错误级别.
trigger_error("输入年龄过大1",E_USER_ERROR);
//exit();
}
echo"ok";
原理图
php错误日志保存
保存错误日志的用处是便于,后续分析.
基本方法是使用error_log来实现.
基本用法是:
//自定义错误函数
function my_error3($errno,$errmes){
$err_info="错误号是:
".$errno."--".$errmes;
echo$err_info;
//把这个错误信息保存
//\r\n表示向文件输入一个回车换行
//
表示向网页输出一个回车换行
error_log($err_info."\r\n",3,"d:
/myerr.txt");
}
现在我们要把时间保存下来.
php中处理异常
① 基本语法
try{
//可能出现错误或是异常的代码
}catch(Exceptione){
//对异常处理
//1.自己处理
//2.自己不处理,将其抛出.
}
思考一个问题?
怎样可以去有效的控制多条可能出现错误或是异常的代码?
程序
try{
//第一句话o
//...
//....
}catch(Exception$e)
{
//处理[根据处理
}
现在我们看看使用异常处理机制,怎样做?
!
!
!
!
!
!
!
!
!
!
快速入门案例:
//我们使用异常机制
try{
addUser("shunping");
updateUser("xxx");
}
//catch捕获 Exception是异常类(是php定义好一个类)
catch(Exception$e){
//echo"失败信息=".$e->getMessage();
throw$e;
}
functionaddUser($username){
if($username=="shunping"){
//添加ok
}else{
//添加error
//抛出异常.
thrownewException("添加失败");
}
}
functionupdateUser($username){
if($username=="xiaoming"){
//正常修改
}else{
thrownewException("修改失败");
}
}
异常使用的注意事项:
通过上面的案例,我们可以看出,使用
try{
//代码
}catch(Exception$e){
//对异常处理
}
这种方式,可以更有效的控制错误.所以在开发中大量的使用.
1. 当捕获到一个异常后,try{}块里的后续代码不继续执行.
2. 如果有一个异常发生,但是你没有catch捕获,则提示一个UncatchedException.(系统.)
3. 当catch一个异常,你可以处理,也可以不处理,不处理就可以
thrownewException(”信息”);
代码:
try{
a2("hello");
}catch(Exception$e){
//获取.
//echo$e->getMesage();
//可以继续抛出,这时将会启动php默认的异常处理器来处理
//你可以自己定义一个顶级异常处理.
throw$e;
}
4. 你可以自定义异常类
classMyExceptionextendsException{
}
6.使用多个catch代码块可以捕获不同种类的异常
try{
//代码....
//第一句话
//第二句话
}catch(PDOException$e){
//
}catch(Exception$e){
|
}
7.也可简单使用Exception捕获
代码说明:
php
//定义了一个异常
classMyException1extendsException{
}
classMyException2extendsException{
}
functionA(){
thrownewMyException1("a");
}
functionB(){
thrownewMyException2("b")
}
functionC(){
try{
A();//抛出MyException1
B();//抛出MyException2
}catch(Exception1$e1){
$e1->getMessage();
}catch(Exception2$e2){
$e2->getMesage();
}
}