当前位置:小鱼儿玄机二站 > 关于计算机 > PHP万分处理浅析,PHP中Exception极度处理类的利用

PHP万分处理浅析,PHP中Exception极度处理类的利用

文章作者:关于计算机 上传时间:2019-10-03

PHP预订了三个要命类:Exception和ErrorException

 代码如下

复制代码 代码如下:

<?php
    try {
        $a=10/0;
    }catch (Exception $e){
        echo "抛出特别";
    }
?>

Exception {
    /* 属性 */
    protected string $message ; //万分音信内容
    protected int $code ; //十分代码号
    protected string $file ; //抛出十三分的公文名
    protected int $line ; //抛出至极在该文件中的行号
    /* 方法 */
    public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] )
    final public string getMessage ( void ) //十分抛出的新闻
    final public Exception getPrevious ( void ) //前一可怜
    final public int getCode ( void ) //相当代码,那是客商自定义的
    final public string getFile ( void ) //产生十分的文书路劲
    final public int getLine ( void ) //爆发分外的行
    final public array getTrace ( void ) //非常追踪消息(array)
    final public string getTraceAsString ( void ) //十分追踪消息(string)
    public string __toString ( void ) //试图直接将杰出对象充作字符串使用时调用子函数的重临值
    final private void __clone ( void ) //克隆卓殊对象时调用
}

以上代码,并不会输出“抛出非常”,而是输出了错误消息:Warning: Division by zero in......

复制代码 代码如下:

注脚:try块中并未有抛出非常,而是根据系统暗许的错误管理机制举行拍卖

ErrorException  extends Exception  {
 
    /* 属性 */
    protected int $severity   ;
    /* 方法 */
   
    public __construct  ([ string $message  = ""  [, int $code  = 0  [, int $severity  = 1  [, string $filename  = __FILE__  [, int $lineno  = __LINE__  [, Exception  $previous  = NULL    ]]]]]] )
    final public int getSeverity  ( void )
    /* 继承的主意 */
    final public string Exception::getMessage  ( void )
    final public Exception Exception::getPrevious  ( void )
    final public int Exception::getCode  ( void )
    final public string Exception::getFile  ( void )
    final public int Exception::getLine  ( void )
    final public array Exception::getTrace  ( void )
    final public string Exception::getTraceAsString  ( void )
    public string Exception::__toString  ( void )
    final private void Exception::__clone  ( void )
}

据此能或无法捕获到不行,决议于有未有实在的抛出卓殊

那正是说什么样捕获万分?

 

(1)PHP可用try...catch...捕获非常,进行非常管理的代码必得在try代码块内。

 代码如下

复制代码 代码如下:

<?php
class Exception
{
    protected $message = 'Unknown exception';   // 卓殊新闻
    protected $code = 0;                        // 客户自定义十分代码
    protected $file;                            // 发生卓殊的文件名
    protected $line;                            // 产生十分的代码行号

try {
    throw new Exception('exception test 1', 1001);
} catch(Exception $e) {
    echo $e->getMessage().'-'.$e->getCode();
}

    function __construct($message = null, $code = 0);

(2)客商能够自定义非凡管理函数[set_exception_handler],用于没用用try/catch捕获的足够。

    final function getMessage();                // 重临分外新闻
    final function getCode();                   // 重临格外代码
    final function getFile();                   // 再次回到发生特别的公文名
    final function getLine();                   // 再次来到产生特别的代码行号
    final function getTrace();                  // backtrace() 数组
    final function getTraceAsString();          // 已格成化成字符串的 getTrace() 消息

复制代码 代码如下:

    /* 可重载的办法 */
    function __toString();                       // 可输出的字符串
}
?>

function  exception_handler ( $e ) {
    echo  "Uncaught exception: "  ,  $e -> getMessage (),  "n" ;
}
 
set_exception_handler ( 'exception_handler' );
 
throw new  Exception ( 'Uncaught Exception' );
 
echo "这行不会进行了";

概括的利用如下:(通过足够,抛出错误音讯)

能够看来接纳ser_exception_handler回调函数管理极其,后续的代码不会继续实践,但try-catch能够。
(3)PHP可用多catch捕获分化门类万分,并允许在catch代码块内再次抛出十分。

 代码如下

复制代码 代码如下:

try {
    $error = 'my error!';
    throw new Exception($error)
} catch (Exception $e) {
    echo $e->getMessage();
}

//请遵照实际扩充格外类
class MyException extends Exception {
    public function __construct($message = '', $code = 0) {
 
    }
 
    public function myFunction() {
        echo 'just for test';
    }
}
 
try {
    throw new MyException('an error');
} catch (MyException $e) {
    echo $e->myFunction();
} catch (Exception $e) {
    echo $e->getMessage();
}

我们得以扩张此类,方便大家的行使

(4)PHP5.5已经支撑finally关键词,你无需关心至极是还是不是溢出了。

 

图片 1

 代码如下

可比较之下如下:

class MyException extends Exception
{
    // 重定义构造器使 message 变为必得被钦点的性质
    public function __construct($message, $code = 0) {
        // 自定义的代码

复制代码 代码如下:

        // 确认保障全体变量都被科学赋值
        parent::__construct($message, $code);
    }

function doSomething() {
    $resource = createResource();
    try {
        $result = useResource($resource);
    } catch (Exception $e) {
        releaseResource($resource);
        log($e->getMessage());
        exit();
    }
    releaseResource($resource);
    return $result;
}
 
//使用finally后
function doSomething2() {
    $resource = createResource();
    try {
        $result = useResource($resource);
        return $result;
    } catch (Exception $e) {
        log($e->getMessage());
        exit();
    } finally {
        releaseResource($resource);
    }
}

    // 自定义字符串输出的体制
    public function __toString() {
        return __CLASS__ . ": [{$this->code}]: {$this->message}n";
    }

您恐怕感兴趣的篇章:

  • php中格外管理措施小结
  • php格外管理利用示例
  • php异常处理技能,一级十分管理器
  • php错误、十分管理机制(补充)
  • PHP怎么样抛出十一分管理错误
  • php 十分管理达成代码
  • php5编制程序中的万分管理详细措施介绍
  • php非凡管理措施实例汇总

    public function customFunction() {
        echo "A Custom function for this type of exceptionn";
    }
}   

不行处理的骨干思维是代码在try代码被调用实践。假若try码块现身错误,大家能够举行三个抛出非凡的管理。某个编制程序语言,如java,,在一定情景下将机关抛出极度。在php中,非凡必得手动抛出。能够选取如下格局抛出一个可怜:

 代码如下

  Throw new Exception(‘message’,code);

  Throw 关键字将触及卓殊管理机制,它是叁个言语结构,并非三个函数,可是必需给它传递二个值。它供给四个收受对象。在最简便的事态下,能够实例化三个置于的Exception类。

  最终,在try代码之后,必得最少给出二个catch代码块。能够将三个catch代码块与二个try代码块进行关联。借使每种catch代码块能够捕获贰个见仁见智品种的不得了,能够选用四个catch代码块是有含义的。比如,即使想捕获Exception类的特别,代码如下

 

 代码如下

Catch(Exception $e)

{

   //handing exception

}

Catch代码捕获的目的就是导致至极并传递给throw语句的靶子(被throw 语句抛出)。使用Exception 类的实例,是不利的抉择。

Exception类提供了之类的内置方法:

  Getcode()      —重返传递给构造函数的代码。

  GetMessage()    —再次来到传递给构造函数的新闻。

  getFile()     —重返发生极其代码的文件的渠道

  getLine()    —重回发生特别的代码所在的行。
注意:

当捕获到三个分外后,try()块里面包车型地铁继承代码将不会继续实施,而是会尝试找出匹配的“catch”代码块
 当抛出贰个万分后,如若不进行catch管理,则会报“Uncaught exception 'Exception'”错误

 代码如下

<?php
    function test($val){
        if ($val>100){
            throw new Exception("提醒音讯:您输入的值过大");
        }
    }
    test(111);
?>

  3.当一个特别抛出后,catch语句块能够开展管理也得以不管理

以下是自身顾客注册效能的某些代码

try{
     //check forms filled in
     if(!filled_out($_POST)){
         throw new Exception('你还从未填写表单,请回去填写');
     }
     //check email address not valid
     if(!check_email($email)){
        throw new Exception('邮件的格式不正确');
     }
     //检查密度的长度是不是超过6
     if(strlen($passwd<6)){
         throw new Exception('密度的长度应该超过6');
     }
     //检查四回密码是或不是等于
     if($passwd!=$passwd1){
         throw new Exception('一遍密码差别,请重新输入');
     }
     //检查客户名的长度是不是科学
     if(strlen($username)>16){
         throw new Exception('客商名的长度不符,请重新输入');
     }
  
 } catch(Exception $e){
     echo $e->getMessage(); //输出相当新闻。
 }

 

php对丰硕的拍卖与java同样,用到的是try{}catch(){}

概念顶尖十分管理器用到的函数是
set_exception_handler("My_exception");
这里的My_expection是开拓者自定义的可怜管理函数,既拔尖非常管理器,独有当程序中绝非函数来管理非常才有甲级非凡管理器来拍卖特别,若无概念拔尖格外管理器,则由系统暗中认可的特别管理器来拍卖特别
比如说明:

 代码如下

<meta http-equiv="content-type" content="text/html;charset=utf-8" /><?php
    set_exception_handler("My_expection");
    function My_expection(){
        echo "这里是一流至极管理器";
    }
    try{
        nohello("hello");
    }catch(Exception $e){
        throw $e;
    }
  function nohello($nohello){
          if($nohello == "hello"){
              throw new Exception("无法输入hello");
          }else{
            echo "输入成功";
        }
    }
?>

 

本文由小鱼儿玄机二站发布于关于计算机,转载请注明出处:PHP万分处理浅析,PHP中Exception极度处理类的利用

关键词: