PHP|生成器方法替代原生range
关于生成器
当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循环),PHP 将会在每次需要值的时候调用生成器函数,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态。
一旦不再需要产生更多的值,生成器函数可以简单退出,而调用生成器的代码还可以继续执行,就像一个数组已经被遍历完了。
Demo
标准的 range() 函数需要在内存中生成一个数组包含每一个在它范围内的值,然后返回该数组, 结果就是会产生多个很大的数组。 比如,调用 range(0, 1000000) 将导致内存占用超过 100 MB。
下面来用PHP的生成器,代替原生range,实现range的方法。
function xrange($start, $limit, $step = 1) { if ($start = 0) { throw new LogicException('Step must be -ve'); } for ($i = $start; $i >= $limit; $i += $step) { yield $i; } }}
Demo
echo 'Single digit odd numbers from range(): ';foreach (range(1, 9, 2) as $number) { echo "$number ";}echo "\n";echo 'Single digit odd numbers from xrange(): ';foreach (xrange(1, 9, 2) as $number) { echo "$number ";}
关闭一个生成器的注意事项:
https://wiki.php.net/rfc/generators
关键字:php
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!