异常处理
扩展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
通过环境方式传递给当前脚本的变量的 数组 。
- $GLOBALS
预定义异常
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 )
}