37. 错误与异常处理(1)

1. die() 语句
这里写图片描述

die("信息"); // 可以输出信息再退出

file_exists("new1.txt") or die("文件不存在") ;

2.自定义创建错误函数
这里写图片描述
这里写图片描述
这里写图片描述

// 自定义的错误(处理器)处理方法
    function my_error($errno,$errmes)
    {
        echo "<font size='5' color='red'>$errno</font><br/>";
        echo "错误信息是: $errmes" . "<br/>";
    }

    // 这里我们还需要改写 set_error_handler()函数
    set_error_handler("my_error",E_WARNING);

    $fp = fopen('aa.txt','r');
    echo 'Ok';

这里写图片描述
这里写图片描述
这里写图片描述

错误触发器:
这里写图片描述
这里写图片描述
这里写图片描述

$age = 700;
    if($age>120)
    {
        trigger_error("输入年龄过大");
        exit();
    }

这里写图片描述
这里写图片描述

自定义:
这里写图片描述
这里写图片描述

//自定义错误函数
    function my_error3($errno,$errmes)
    {
        echo "错误号是:" . $errno;
    }

    //指定E_user_WARNING 错误级别的函数
    set_error_handler("my_error3",E_USER_WARNING);

    $age = 700;
    if($age>120)
    {
        // 调用触发器,同时指定错误级别。
        trigger_error("输入年龄过大123",E_USER_WARNING);
        exit();
    }
    echo 'Ok';

这里写图片描述

//自定义错误函数


    function my_error4($errno,$errmes)
    {
        echo "出大事了:" . $errno. "<BR/>";
        exit();
    }

    //指定E_user_WARNING 错误级别的函数
    set_error_handler("my_error4",E_USER_ERROR);

    $age = 700;
    if($age>120)
    {
        // 调用触发器,同时指定错误级别。
        trigger_error("输入年龄过大123",E_USER_ERROR);
        //exit();
    }
    echo 'Ok';

这里写图片描述


3.错误日志
这里写图片描述

function my_error4($errno,$errmes)
    {
        $err_info = "出大事了:" . $errno. "<BR/>";
        echo $err_info;
        //保存错误信息
        error_log($err_info.'\r\n',3,"myerror.txt");
    }

    //指定E_user_WARNING 错误级别的函数
    set_error_handler("my_error4",E_USER_ERROR);

    $age = 700;
    if($age>120)
    {
        // 调用触发器,同时指定错误级别。
        trigger_error("输入年龄过大123",E_USER_ERROR);
        //exit();
    }
加上时间:
echo $err_info;
        //保存错误信息
        date_default_timezone_get("Asia/Chongqing");
        error_log("时间是" . date("Y-m-d G-i-s") . $err_info . "\r\n" ,3,"myerror.txt");

4. 异常处理
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

//我们使用异常机制
    try{
        addUser('sss');    
        updateUser('xxx');
    }
    //catch 捕获Exception 是异常类(php定义好的一个类)
    catch(Exception $e){
        echo "失败信息 : " . $e->getMessage();
    }

    function addUser($username)
    {
        if($username == 'wjh'){
            //添加ok
        }else{
            //添加error
            throw new Exception("添加失败");
        }
    }

    function updateUser($username)
    {
        if($username == 'xiaoming'){
            //添加ok
        }else{
            throw new Exception('更新失败');
        }
    }

这里写图片描述
这里写图片描述

function a1($val)
    {
        if($val>100){
            throw new Exception('val>100');
        }
    }

    function a2($val)
    {
        if($val == 'hello'){
            throw new Exception('不要输入hello');
        }
    }

    try{
        a2('hello');
    }catch(Exception $e){
        throw $e;  //抛给系统
    }

这里写图片描述
自定义异常处理:
这里写图片描述
这里写图片描述

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
  .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
  return $errorMsg;
  }
 }

$email = "someone@example...com";

try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 }

catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>

这里写图片描述

这里写图片描述

<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}

$email = "someone@example.com";

try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 //check for "example" in mail address
 if(strpos($email, "example") !== FALSE)
  {
  throw new Exception("$email is an example e-mail");
  }
 }

catch (customException $e)
 {
 echo $e->errorMessage();
 }

catch(Exception $e)
 {
 echo $e->getMessage();
 }
?>

这里写图片描述


这里写图片描述

//定义一个顶级异常处理器
    function my_exception($e)
    {
        echo '我是定义异常处理器' . $e->getMessage();
    }

    //修改默认的顶级异常处理器
    set_exception_handler('my_exception');

    function a1($val)
    {
        if($val>100){
            throw new Exception('val>100');
        }
    }

    function a2($val)
    {
        if($val == 'hello'){
            throw new Exception('不要输入hello');
        }
    }

    try{
        a2('hello');
    }catch(Exception $e){
        throw $e;  //抛给系统
    }

这里写图片描述
这里写图片描述

自定义异常类:
这里写图片描述
这里写图片描述

//定义了一个异常
    class MyException1 extends Exception
    {

    }

    class MyException2 extends Exception
    {

    }

    function A()
    {
        throw new MyException1('a');
    }

    function B()
    {
        throw new MyException2('b');
    }

    function C()
    {
        try{
            A();
            B();
        }catch(MyException $e1){
            $e1->getMessage();
        }catch(MyException2 $e2){
            $e2->getMessage();
        }
    }
try{
        //$i = 8/0;  

        $fp = fopen('aa.txt','r');  //php需要抛出才可以捕获异常,这个太老,没有抛,所以捕获不到异常
    }catch(Exception $e){
        echo 'ok';
        echo $e->getMessage();
    }

这里写图片描述


这里写图片描述

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = $this->getMessage().' is not a valid E-Mail address.';
  return $errorMsg;
  }
 }

$email = "someone@example.com";

try
 {
 try
  {
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE)
   {
   //throw exception if email is not valid
   throw new Exception($email);
   }
  }
 catch(Exception $e)
  {
  //re-throw exception
  throw new customException($email);
  }
 }

catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }

这里写图片描述


这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值