hedronium/generator-nest

支持 PHP5 的生成器委派。

v1.0 2016-12-22 11:08 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:42:23 UTC


README

Generator delegation Meme

PHP7 本身支持生成器委派(yield from another_generator()),但许多项目仍然是用 PHP5 编写的,或者出于兼容性原因需要支持 PHP5。

这个小巧的包包含一个生成器,允许在 PHP5 中进行生成器委派。

安装

composer require hedronium/generator-nest

使用方法

假设我们有一个这样的生成器。

function combinations($letters = [])
{
	$chars = ['a', 'b', 'c'];

	foreach ($chars as $char) {
		$merged = array_merge($letters, [$char]);

		yield implode('', $merged);

		if (count($letters) < 2) {
			yield combinations($merged);
		}
	}
}

如果你尝试像这样遍历对生成器的调用

foreach (combinations() as $combination) {
	// your code
}

你将接收到3个字符串和一些作为对象的生成器。这开始成为一个问题,因为现在为了使用这个生成器,你的调用代码必须是递归的,这几乎违背了最初使用生成器的目的。

介绍 Generator nest。

use Hedronium\GeneratorNest\GeneratorNest;

foreach (GeneratorNest::nested(combinations()) as $combination) {
	echo $combination, ' ';
}

现在输出将简单变为

a aa aaa aab aac ab aba abb abc ac aca acb acc b ba baa bab bac bb bba bbb bbc bc bca bcb bcc c ca caa cab cac cb cba cbb cbc cc cca ccb ccc

成功了!

许可证

MIT.