错误的类别:
1. 语法错误,错误的语法最容易调试,因为PHP有明显的提示,遇到错误不再执行。
2. 运行时错误,输出一条错误,但PHP代码继续执行。
3. 逻辑错误,这种错误很麻烦,因为写代码的人考虑的不对,逻辑不对导致的错误,程序员一辈子
的痛,依赖经验
错误的级别:
1.notice 提示,一般不管它,一般是屏蔽掉。
2.waring 警告,需要排除掉。
3.error 致命错误,后续代码不执行。
如何屏蔽错误:
1.ini_set(‘display_errors’,0); 屏蔽所有错误
2.error_reporting(E_ALL~E_NOTICE); 屏蔽notice错误
3.@错误抑制符
异常处理,它也可以看成是错误处理,也不
是。异常这个词,是在正常运行中发生的,比如说平时都是你来开门,每天都正常,突然有一天用力
过猛了,钥匙断了,这就属于运行过程中的出现的意外。
所以,异常是程序上线以后出现的意外情况。
其实异常处理是我们在上线以后面对可能但还没有发生的错误做处理,比如上面的钥匙断了,是否准
备了被用钥匙?被用钥匙放在哪了?怎么找到备用钥匙?这就是我们的异常处理。
php的异常处理做的并不完善,不像C++,C#,在做项目的时候就完善好了所有的错误处理方案,直
接调用就可以运行自动处理所有的错误,php的错误处理作为了解,工作中如果有⼈写了错误处理,
你要懂得如何看懂别人的代码。
基本语法:
PHP给我们提供了一个类,Exception(),帮我们解决可能发生的意外。
1 <?php 2 //得到异常处理对象 3 $e = new Exception('我是异常处理类得到的对象'); 4 var_dump($e); 5 //得到错误信息 6 echo $e->getMessage();
实际的试验一下:
1 <?php 2 //基本语法,一体的,不可分开 3 try{ 4 5 }catch(Exception $e){ 6 7 } 8 9 10 //每一个步骤都有可能出现异常 11 //echo "早晨起床<br>"; 12 //echo "开⻋上班<br>"; 13 //试着去运⾏这⼀⾏代码,如果有问题怎么办? 14 try{ 15 echo "开始上班<br>"; 16 }catch(Exception $e){ 17 echo "换上备胎,继续上班<br>"; 18 }//echo "到公司上班<br>";
运行原理:
1 /* 2 1.试着执行try中的代码,如果没有问题,继续执行catch之后的代码。 3 */ 4 echo "早晨起床<br>"; 5 //试着去运行这一行代码,如果有问题怎么办? 6 try{ 7 echo "开始上班<br>"; 8 //结果这一块真有问题了,需要抛出异常 9 }catch(Exception $e){ 10 echo "换上备胎,继续上班<br>"; 11 } 12 echo "到公司上班<br>";
如何抛出异常?
1 /* 2 如果有throw抛出异常,就会跑到catch中,启动备选方案,然后继续往下面 3 如果没有throw这一行代码抛出异常,就不会运行备选方案 4 */ 5 echo "早晨起床<br>"; 6 7 try{ 8 echo "开始上班<br>"; 9 throw new Exception('爆胎了<br>'); 10 }catch(Exception $e){ 11 echo "换上备胎,继续上班<br>"; 12 } 13 echo "到公司上班<br>";
那这个类中到底提供了多少方法可以给我们用?
PHP手册搜索异常部分:
1 echo "早晨起床<br>"; 2 3 try{ 4 echo "开始上班<br>"; 5 throw new Exception('爆胎了<br>'); 6 }catch(Exception $e){ 7 echo $e->getMessage();//获取异常的信息内容 8 echo $e->getCode();//获取异常代码 9 echo $e->getFile();//异常的文件名 10 echo $e->getLine();//异常在多少行 11 echo "换上备胎,继续上班<br>"; 12 } 13 echo "到公司上班<br>";
常规的错误处理方法:
1 //更新数据的方法 2 class MySQL{ 3 public $link; 4 public function __construct($host){ 5 $this->link = mysqli_connect($host,'root','123456'); 6 } 7 //获取数据 8 public function getData($id){ 9 if($id ==4){ 10 return '查询结果'; 11 }else{ 12 return false; 13 } 14 } 15 //修改操作 16 public function saveData($id){ 17 if($id==4){ 18 return true; 19 }else{ 20 return false; 21 } 22 } 23 } 24 $db = new MySQL('localhost'); 25 if($db->link){ 26 //连接数据库成功 27 $result = $db->getData(4); 28 if($result){ 29 //获取数据成功 30 $res = $db->saveData(14); 31 if($res){ 32 echo '更新成功'; 33 }else{ 34 echo '更新失败'; 35 } 36 }else{ 37 echo '获取数据失败'; 38 } 39 }else{ 40 echo '连接数据库失败';
异常处理的方法:
1 class MySQL{ 2 public $link; 3 public function __construct($host){ 4 $this->link = mysqli_connect($host,'root','123456'); 5 if(!$this->link){ 6 throw new Exception ('连接数据库失败'); 7 } 8 } 9 //获取数据 10 public function getData($id){ 11 if($id == 4){ 12 return '查询结果'; 13 }else{ 14 throw new Exception ('获取数据失败'); 15 } 16 } 17 //修改操作 18 public function saveData($id){ 19 if($id==4){ 20 return true; 21 }else{ 22 throw new Exception('更新失败'); 23 } 24 } 25 } 26 try{ 27 $db =new MySQL('localhost'); 28 $db->getData(4); 29 $db->saveData(41); 30 echo '更新成功'; 31 }catch(Exception $e){ 32 echo $e->getMessage(); 33 }
异常处理可以继承使用,未来同时处理一些其他的错误。
1 <?php 2 //页面错误 3 class HTMLException extends Exception{}; 4 //数据库错误 5 class DBException extends Exception{}; 6 //这是没有catch的情况 7 //throw new HTMLException('页面错误'); 8 try{ 9 //throw new HTMLException('页面出现问题'); 10 //throw new DBException('数据库连接失败'); 11 throw new Exception('错误信息'); 12 }catch(HTMLException $e){ 13 echo '404 error'; 14 }catch(DBException $e){ 15 // 偷偷记录到日志 16 echo '服务器维护中。。。。'; 17 }catch(Exception $e){ 18 echo '处理漏网之鱼'; 19 }