您好,欢迎访问一九零五行业门户网

PHP生成器类

简介使用循环结构(例如foreach)遍历大量数据将需要大量内存和相当长的处理时间。使用生成器可以迭代一组数据而无需这些开销。生成器函数与普通函数类似。然而,generator 并不是函数中的 return 语句,而是使用 yield 关键字来重复执行,以便提供要迭代的值。
yield 关键字是生成器机制的核心。尽管它的用法看起来与 return 类似,但它不会停止函数的执行。它提供迭代的下一个值并暂停函数的执行。
语法generator implements iterator { /* methods */ public current ( void ) : mixed public getreturn ( void ) : mixed public key ( void ) : mixed public next ( void ) : void public rewind ( void ) : void public send ( mixed $value ) : mixed public throw ( throwable $exception ) : mixed public valid ( void ) : bool public __wakeup ( void ) : void}
方法public generator::current ( void ) − mix — 获取生成的值
public generator::getreturn ( void ) : mix — 获取生成器的返回值
public generator::key ( void ) − mix — 获取生成值的键。
p>public generator::next ( void ) − void — 恢复生成器的执行。与使用 null 作为参数调用 generator::send() 的效果相同。
public generator::rewind ( void ) − void — 倒回迭代器。如果迭代已经开始,这将引发异常。
public generator::send (mixed $value) : mix - 将给定值作为当前yield表达式的结果发送到生成器并恢复生成器。
public generator::throw ( throwable $exception ) − mix — 将异常抛出到生成器中并恢复生成器的执行。
public generator::valid ( void ) − bool — 检查迭代器是否已关闭
public generator::__wakeup ( void ) − void — 由于生成器无法序列化而引发异常。
generator 类实现 iterator 接口。生成器对象不能通过 new 实例化。任何具有yield关键字的用户定义函数都会创建生成器类的对象。
生成器示例由于生成器实现了iterator接口,因此每个循环都可以用于遍历生成值。
 现场演示
<?phpfunction squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; }}$gen=squaregenerator();foreach ($gen as $val){ echo $val . " ";}?>
输出上述程序显示以下输出
1 4 9 16 25
以下示例使用生成器类的 current() 和 next() 方法来遍历生成值。使用 valid() 方法检查循环条件。
示例 实时演示
<?phpfunction squaregenerator(){ for ($i=1; $i<=5; $i++){ yield $i*$i; }}$gen=squaregenerator();while ( $gen->valid() ){ echo "key: " . $gen->key(). " value: ". $gen->current() . ""; $gen->next();}?>
输出上述程序显示以下输出
key: 0 value: 1key: 1 value: 4key: 2 value: 9key: 3 value: 16key: 4 value: 25
以上就是php生成器类的详细内容。
其它类似信息

推荐信息