PHP从头开始-5

异常处理

扩展PHP内置的异常处理类

内置异常处理类的大概结构

<?php
 class  Exception
 {
    protected  $message  =  'Unknown exception' ;    // 异常信息
     private    $string ;                           // __toString cache
     protected  $code  =  0 ;                         // 用户自定义异常代码
     protected  $file ;                             // 发生异常的文件名
     protected  $line ;                             // 发生异常的代码行号
     private    $trace ;                            // backtrace
     private    $previous ;                         // previous exception if nested exception

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

    final private function  __clone ();            // Inhibits cloning of exceptions.

     final public  function  getMessage ();         // 返回异常信息
     final public  function  getCode ();            // 返回异常代码
     final public  function  getFile ();            // 返回发生异常的文件名
     final public  function  getLine ();            // 返回发生异常的代码行号
     final public  function  getTrace ();           // backtrace() 数组
     final public  function  getPrevious ();        // 之前的 exception
     final public  function  getTraceAsString ();   // 已格成化成字符串的 getTrace() 信息

    // Overrideable
     public function  __toString ();                // 可输出的字符串
 }
 ?> 

如果创建自定义的异常类,需要重新定义构造函数,并同时调用parent::__construct()来检查所有的变量是否已被赋值。

生成器

实现简单的对象迭代,相比定义对象实现iterator接口,性能开销和复杂性大大降低。

语法

一个生成器看起来像一个普通的函数,不同的是函数返回一个值,而生成器通过yield返回,然后保留当前的状态,下一次调用的时候继续执行。

yield关键字

它与return不同,return会返回值并终止函数的执行,但是yield会返回一个值并且暂停执行。

指定键名来生成值

可以在生成的时候指定键名
yeild $key=>$value

生成null值

在没有给yeild传入值的情况下,会生成一个null值并自动配对一个键名。

使用引用生成值

在函数名前加一个&,可以返回引用。

生成器对象

当生成器函数第一次被调用的时候会返回一个内部Generator对象。

<?php
 class  Generator  implements  Iterator  {
    public function  rewind ();           // 返回到迭代器的第一个元素。

     public function  valid ();            // 返回false如果迭代器已经关闭,否则返回true

     public function  current ();          // 返回当前yield值.

     public function  key ();              // 返回当前yield键名.

     public function  next ();             // 恢复生成器的执行。

     public function  send ( $value );       // 将传入的值作为yield表达式的结果并且恢复发生器的执行。

 }

引用的解释

  • 如果具有引用的数组被拷贝,其值不会接触引用。对于数组船只给函数也是这样。
  • 如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回,则会自动创建该变量。
  • 同样的语法还可以用在函数和new运算符中
    • php5开始,new自动返回引用
  • 如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。
  • 可以将变量通过引用传递给函数,定义的时候使用了引用,调用的时候就不需要再加上&符号了。
  • 不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!
  • unset一个引用只会断开绑定不会销毁变量内容。

    预定义变量

    超全局变量

    在脚本的全部作用域都可用。这些超全局变量是:

    1. $GLOBALS
      一个包含了全部变量的全局组合 数组 。变量的名字就是数组的键。
    2. $_SERVER
      一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。
    3. $_GET
      通过 URL 参数传递给当前脚本的变量的数组。
    4. $_POST
      通过 HTTP POST 方法传递给当前脚本的变量的数组。
    5. $_FILES
      通过 HTTP POST 方式上传到当前脚本的项目的 数组
    6. $_COOKIE
      通过 HTTP Cookies 方式传递给当前脚本的变量的 数组 。
    7. $_SESSION
      当前脚本可用 SESSION 变量的数组。
    8. $_REQUEST
      默认情况下包含了$_GET$_POST$_COOKIE 的 数组 。
    9. $_ENV
      通过环境方式传递给当前脚本的变量的 数组 。

预定义异常

Exception

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 )

final public string getTraceAsString  ( void )

public string __toString  ( void )

final private void __clone  ( void )
}

ErrorException

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 )
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值