搜索
首页
笔记
案例
关于
课程列表
PHP
php基础
基本语法
流程控制
函数
数组
对象
Trait
字符串处理
正则表达式
SPL
输出缓存
php与xml
生成器
php常用扩展
错误与异常处理
日期与时间
文件系统
图像处理
数据库开发
Mysqli扩展
Db类
高级功能
会话控制
CURL
PHP安全
PHP版本
从5.6到7.0
从7.0到7.1
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
php与xml
生成器
## 生成器总览 生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。 生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代的值。 一个简单的例子就是使用生成器来重新实现 range() 函数。 标准的 range() 函数需要在内存中生成一个数组包含每一个在它范围内的值,然后返回该数组, 结果就是会产生多个很大的数组。 比如,调用 range(0, 1000000) 将导致内存占用超过 100 MB。 做为一种替代方法, 我们可以实现一个 xrange() 生成器, 只需要足够的内存来创建 Iterator 对象并在内部跟踪生成器的当前状态,这样只需要不到1K字节的内存。 ```php = 0) { throw new Exception('Step must be -ve'); } for ($i = $start; $i >= $limit; $i += $step) { yield $i; } } } $arr = xrange(1, 10, 1); foreach ($arr as $item) { echo $item . PHP_EOL; } ``` ## 生成器语法 一个生成器函数看起来像一个普通的函数,不同的是普通函数返回一个值,而一个生成器可以yield生成许多它所需要的值。 当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循环),PHP 将会在每次需要值的时候调用生成器函数,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态。 一旦不再需要产生更多的值,生成器函数可以简单退出,而调用生成器的代码还可以继续执行,就像一个数组已经被遍历完了。 **Note:** *一个生成器不可以返回值: 这样做会产生一个编译错误。然而return空是一个有效的语法并且它将会终止生成器继续执行。* ### yield关键字 生成器函数的核心是yield关键字。它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。 ### 指定键名来生成值 ``` $fields; } } foreach (input_parser($input) as $id => $fields) { echo "$id:\n"; echo " $fields[0]\n"; echo " $fields[1]\n"; } ?> ``` 结果为: ```php 1: PHP Likes dollar signs 2: Python Likes whitespace 3: Ruby Likes blocks ``` ### 生成NULL值 ``` ``` 结果为: ``` array(3) { [0]=> NULL [1]=> NULL [2]=> NULL } ```
php与xml
文章目录