zoukankan      html  css  js  c++  java
  • PHP面向对象(六)

    一、异常处理
      异常(Exception):是一个程序在执行过程中出现的一个例外或是事件,它中断了正常指令的执行,跳转到其他程序模块继续执行,严重会导致丢失数据或者程序崩溃。 

      异常处理:用于在指定的错误发生时改变脚本的正常流程。是PHP5中的一个新的重要特性。异常处理是一种可扩展、易维护的错误处理统一机制,并提供了一种新的面向对象的错误处理方式。

      当异常被触发时,通常会发生:

        1.当前代码状态被保存
        2.代码执行被切换到预定义的异常处理器函数
        3.根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本

      异常处理格式:
        try{
          使用try去包含可能会发生异常的代码.
          一旦出现异常try进行捕获异常,交给catch处理。
          抛出异常语句:throw 异常对象。
        }catch(异常对象参数){
          在这里做异常处理。
        }[catch(...){
          .. .. ..
        }]
      

      异常的规则:
        需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
        每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
        使用多个 catch 代码块可以捕获不同种类的异常。
        可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。
        简而言之:如果抛出了异常,就必须捕获它。

     1 <?php
     2     //模拟一个异常抛出和处理
     3         try {
     4             $error = 'Always throw this error';
     5             throw new Exception($error);   
     6             //创建一个异常对象,通过throw语句抛出
     7             echo 'Never executed';         
     8             //从这里开始,try代码块内的代码将不会再被执行
     9         } catch (Exception $e) {
    10             echo 'Caught exception: '.$e->getMessage()."<br>";  
    11             //输出捕获的异常消息
    12         }
    13         echo 'Hello World';       //程序没有崩溃继续向下执行
    14     ?>

    二、自定义异常处理类

      1.系统异常处理:PHP中提供的内置异常处理类Exception是所有异常类的基类,所有系统内置异常处理类或者自定义异常处理类都必须继承这个类。

    内置异常处理类Exception的结构:

     1 <?php
     2     class Exception{
     3         protected $message = 'Unknown exception';   // 异常信息  
     4         protected $code = 0;                          // 用户自定义异常代码
     5         protected $file;                              // 发生异常的文件名    
     6         protected $line;                              // 发生异常的代码行号 
     7           
     8         //构造方法
     9         function __construct($message = null$code = 0);    
    10 
    11         final function getMessage();            // 返回异常信息   
    12         final function getCode();               // 返回异常代码    
    13         final function getFile();               // 返回发生异常的文件名   
    14         final function getLine();               // 返回发生异常的代码行号    
    15         final function getTrace();                // backtrace() 数组    
    16         final function getTraceAsString();      // 已格成化成字符串的 getTrace() 信息
    17             
    18         /* 可重载的方法 */   
    19         function __toString();                        // 可输出的字符串
    20     }
    21 ?>

      2.自定义异常处理类

     1 <?php
     2     /* 自定义的一个异常处理类,但必须是扩展内异常处理类的子类 */
     3     class MyException extends Exception{
     4         //重定义构造器使第一个参数 message 变为必须被指定的属性
     5         public function __construct($message, $code=0){
     6             //可以在这里定义一些自己的代码
     7          //建议同时调用 parent::construct()来检查所有的变量是否已被赋值
     8             parent::__construct($message, $code);
     9         }    
    10         public function __toString() {        
    11           //重写父类方法,自定义字符串输出的样式
    12           return __CLASS__.":[".$this->code."]:".$this->message."<br>";
    13         }
    14         public function customFunction() {    
    15              //为这个异常自定义一个处理方法
    16              echo "按自定义的方法处理出现的这个类型的异常<br>";
    17         }
    18     }
    19 ?>
     1 <?php
     2    try { //使用自定义的异常类捕获一个异常,并处理异常
     3         $error = '允许抛出这个错误';       
     4         throw new MyException($error);    
     5              //创建一个自定义的异常类对象,通过throw语句抛出
     6         echo 'Never executed'; 
     7             //从这里开始,try代码块内的代码将不会再被执行
     8     } catch (MyException $e) {        //捕获自定义的异常对象
     9         echo '捕获异常: '.$e;        //输出捕获的异常消息
    10         $e->customFunction();  //通过自定义的异常对象中的方法处理异常
    11     }
    12     echo '你好呀';              //程序没有崩溃继续向下执行
    13 ?>

    三、捕获多个异常
      在try代码之后,必须至少给出一个catch代码块,也可以将多个catch代码块与一个try代码块关联使用。那么使用多个catch就可以捕获不同的类所产生的异常。注意顺序。Exception必须在最后一个catch中,不然其他catch就没有意义。

    四、PHP中类与对象的相关函数
    ============================
    Classes/Object 函数
    ============================
    参考手册中--与对象和类有关的扩展函数
    1. class_alias — 为类创建一个别名
    格式:bool class_alias ([ string $original [, string $alias ]] )
    示例:
    class foo { }
    class_alias('foo', 'bar');

    $a = new foo;
    $b = new bar;
    // the objects are the same
    var_dump($a == $b, $a === $b); //bool(true)
    var_dump($a instanceof $b); //bool(false)

    // the classes are the same
    var_dump($a instanceof foo); //bool(true)
    var_dump($a instanceof bar); //bool(true)

    var_dump($b instanceof foo); //bool(true)
    var_dump($b instanceof bar); //bool(true)


    *2. class_exists — 检查类是否已定义
    格式: bool class_exists ( string $class_name [, bool $autoload ] )
    --如果由 class_name 所指的类已经定义,此函数返回 TRUE,否则返回 FALSE。

    默认将会尝试调用 __autoload,如果不想让 class_exists() 调用 __autoload,
    可以将 autoload 参数设为 FALSE。


    3. get_called_class — the "Late Static Binding" class name
    (PHP 5 >= 5.3.0) 获取调用者的类名


    *4. get_class_methods — 返回由类的方法名组成的数组
    格式:array get_class_methods ( mixed $class_name )
    返回由 class_name 指定的类中定义的方法名所组成的数组。如果出错,则返回 NULL。

    从 PHP 4.0.6 开始,可以指定对象本身来代替 class_name


    5. get_class_vars — 返回由类的默认公有属性组成的数组
    格式: array get_class_vars ( string $class_name )
    返回由类的默认公有属性组成的关联数组,此数组的元素以 varname => value 的形式存在。


    *6. get_class — 返回对象的类名
    格式: string get_class ([ object $obj ] )
    返回对象实例 obj 所属类的名字。如果 obj 不是一个对象则返回 FALSE。


    7. get_declared_classes — 返回由已定义类的名字所组成的数组
    格式:array get_declared_classes ( void )
    返回由当前脚本中已定义类的名字组成的数组。


    8. get_declared_interfaces — 返回一个数组包含所有已声明的接口
    格式:array get_declared_interfaces ( void )
    本函数返回一个数组,其内容是当前脚本中所有已声明的接口的名字。


    9. get_object_vars — 返回由对象属性组成的关联数组
    格式:array get_object_vars ( object $obj )
    返回由 obj 指定的对象中定义的属性组成的关联数组。


    10. get_parent_class — 返回对象或类的父类名
    格式:string get_parent_class ([ mixed $obj ] )
    如果 obj 是对象,则返回对象实例 obj 所属类的父类名。


    11. interface_exists — 检查接口是否已被定义
    格式:bool interface_exists ( string $interface_name [, bool $autoload ] )
    本函数在由 interface_name 给出的接口已定义时返回 TRUE,否则返回 FALSE。


    *12. is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE
    我们可以使用运算符: instanceof代替上面的is_a操作

     

  • 相关阅读:
    起步X5 UI模型使用的新的JAVASCRIPT UI库 DHTMLX (简称DHX)
    行车记录仪
    牛客网——华为机试(题9:提取不重复的整数)(Java)
    牛客网——华为机试(题8:合并表记录)(Java)
    牛客网——华为机试(题7:取近似值)(Java)
    牛客网——华为机试(题6:质数因子)(Java)
    牛客网——华为机试(题5:进制转换)(Java)
    牛客网——华为机试(题4:字符串分隔)(Java)
    牛客网——华为机试(题2:计算字符个数)(Java)
    牛客网——华为机试(题1:字符串最后一个单词的长度)(Java)
  • 原文地址:https://www.cnblogs.com/yexiang520/p/5668592.html
Copyright © 2011-2022 走看看