您的位置:首页 > 编程语言 > PHP开发

PHP从头开始-5

2015-10-13 14:44 525 查看

异常处理

扩展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一个引用只会断开绑定不会销毁变量内容。

预定义变量

超全局变量

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

$GLOBALS

一个包含了全部变量的全局组合 数组 。变量的名字就是数组的键。

$_SERVER

一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。

$_GET

通过 URL 参数传递给当前脚本的变量的数组。

$_POST

通过 HTTP POST 方法传递给当前脚本的变量的数组。

$_FILES

通过 HTTP POST 方式上传到当前脚本的项目的 数组

$_COOKIE

通过 HTTP Cookies 方式传递给当前脚本的变量的 数组 。

$_SESSION

当前脚本可用 SESSION 变量的数组。

$_REQUEST

默认情况下包含了
$_GET
$_POST
$_COOKIE
的 数组 。

$_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 )
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: