zoukankan      html  css  js  c++  java
  • PHP面向对象之异常处理

    异常处理

    • 概念

      • 集中处理在代码块中发生的异常
      • 在代码块中发生了异常直接抛出,代码块中不处理异常,将异常集中起来一起处理
    • 使用的关键字

      • try 监测代码块
      • catch 捕获异常
      • throw 抛出异常,抛出异常后,try块终止执行,执行权限交给catch块
      • finally 无论有无异常都会执行,可以省略
      • Exception 异常类
    • 语法结构

    try{
    	//检测代码
    }catch(Exception $ex){
    	//捕获异常
    }
    finally{
    	//不论是否有异常,都要执行,finally可以省略
    }
    
    <?php
    header("Content-Type: text/html; charset=utf-8");
    if($_SERVER['REQUEST_METHOD']== 'POST'){
    	if(isset($_POST['button'])) {
    		try{
    			$age=$_POST['age'];
    			if($age=='')
    				throw new Exception('年龄不能为空',1001);	//抛出异常
    			if(!is_numeric($age))
    				throw new Exception('年龄必须是数字',1001);	//抛出异常
    			if(!($age>=10 && $age<=30)) 
    				throw new Exception('年龄必须在10-30之间',1002);	//抛出异常
    			echo '您的年龄合适<br>';
    		}catch(Exception $ex){		//捕获异常
    			echo '错误信息:'.$ex->getMessage(),'<br>';
    			echo '错误码:'.$ex->getCode(),'<br>';
    			echo '文件地址:'.$ex->getFile(),'<br>';
    			echo '错误行号:'.$ex->getLine(),'<br>';
    		}
    		finally{
    			echo '关闭数据库连接';  //不管是否有异常,finally都要执行
    			exit;
    		}
    	}
    }
    ?>
    <form method="post" action="">
    	年龄: <input type="text" name="age"> <br />
    	<input type="submit" name="button" value="提交">
    </form>
    

    自定义异常

    • 场景:如果实现异常的分类处理
      • 比如异常有三个级别,异常对应三种处理方式
      • 自定义三种异常即可
      • 所有异常类的父类是Exception,Exception中的方法不允许重写
    <?php
    //自定义空异常类
    class MyNullException extends Exception {
    }
    //自定义类型异常
    class MyTypeException extends Exception {
    }
    //自定义范围异常
    class MyRangeException extends Exception {
    }
    //逻辑代码
    header("Content-Type: text/html; charset=utf-8");
    if($_SERVER['REQUEST_METHOD']== 'POST'){
    	if(isset($_POST['button'])) {
    		try{
    			$name= $_POST['name'];
    			$age= $_POST['age'];
    			if($name=='')
    				throw new MyNullException('姓名不能为空');
    			if($age=='')
    				throw new MyNullException('年龄不能为空');
    			if(!is_numeric($age))
    				throw new MyTypeException('年龄不是数字');
    			if($age<10 || $age>30)
    				throw new MyRangeException('年龄必须在10-30之间');
    			echo '姓名:'.$name,'<br>';
    			echo '年龄:'.$age;
    		}catch(MyNullException $ex){
    			echo $ex->getMessage(),'<br>';
    			echo '错误记录在日志中';
    		}catch(MyTypeException $ex){
    			echo $ex->getMessage(),'<br>';
    			echo '发送电子邮件';
    		}catch(MyRangeException $ex){
    			echo $ex->getMessage(),'<br>';
    			echo '给管理员打电话';
    		}
    	}
    	exit;
    }
    ?>
    <form method="post" action="">
    	姓名: <input type="text" name="name"> <br />
    	年龄: <input type="text" name="age"> <br />
    	<input type="submit" name="button" value="提交">
    </form>
    
  • 相关阅读:
    [BZOJ4631]踩气球
    [BZOJ1998][Hnoi2010]Fsk物品调度
    [BZOJ3624][Apio2008]免费道路
    [BZOJ1064][Noi2008]假面舞会
    [BZOJ4154][Ipsc2015]Generating Synergy
    [BZOJ1941][Sdoi2010]Hide and Seek
    [BZOJ2850]巧克力王国
    [BZOJ2683][BZOJ4066]简单题
    万年历(calendar)
    SACD ISO镜像中提取DSDIFF(DFF)、DSF文件
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14117143.html
Copyright © 2011-2022 走看看