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 ) }
相关文章推荐
- 如何在OS X Yosemite 配置php web站点及虚拟主机?
- 让我们来FirePHP
- PHP实现连接设备、通讯和发送命令的方法
- vsftpd 用户访问上级目录
- php扩展和pb 编译的时候问题
- php手册之变量范围
- Yii2 RBAC 用到的表
- 部署ntp时间服务器
- PHP扩展总结//待完善
- Yii2.0 执行流程分析
- PHP 模拟多进程
- 为什么 Laravel 会成为最成功的 PHP 框架?
- PHP savexml()函数
- Thinkphp-实现文章回收站的功能
- PHP pthreads 多线程操作
- PHP魔术函数、魔术常量、预定义常量
- InputStream OutputStream
- PHP从头开始-4
- 【转】php容易犯错的10个地方
- PHP中empty()和isset()的区别