(PHP 5 >= 5.5.0, PHP 7)
�������ṩ��һ�ָ����ķ�����ʵ�ּ������������Ƚ϶�����ʵ�� Iterator �ӿڵķ�ʽ�����ܿ��������Դ�͡�
�������������� foreach �������д����������һ�����ݶ�����Ҫ���ڴ��д���һ������, �ǻ�ʹ����ڴ�ﵽ���ޣ�����ռ�ݿɹ۵Ĵ���ʱ�䡣�෴�������дһ������������������һ����ͨ���Զ�������һ��, ����ͨ����ֻ����һ�β�ͬ����, ���������Ը�����Ҫ yield ��Σ��Ա�������Ҫ������ֵ��
һ�������Ӿ���ʹ��������������ʵ�� range() ������ ���� range() ������Ҫ���ڴ�������һ���������ÿһ��������Χ�ڵ�ֵ��Ȼ�ظ�����, ������ǻ��������ܴ�����顣 ���磬���� range(0, 1000000) �������ڴ�ռ�ó��� 100 MB��
��Ϊһ���������, ���ǿ���ʵ��һ�� xrange() ������, ֻ��Ҫ�㹻���ڴ������� Iterator �������ڲ������������ĵ�ǰ״̬������ֻ��Ҫ����1K�ֽڵ��ڴ档
Example #1 �� range() ʵ��Ϊ������
<?php
function xrange($start, $limit, $step = 1) {
if ($start < $limit) {
if ($step <= 0) {
throw new LogicException('Step must be +ve');
}
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
} else {
if ($step >= 0) {
throw new LogicException('Step must be -ve');
}
for ($i = $start; $i >= $limit; $i += $step) {
yield $i;
}
}
}
/*
* ע������range()��xrange()����Ľ����һ���ġ�
*/
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 ";
}
?>
�������̻������
Single digit odd numbers from range(): 1 3 5 7 9 Single digit odd numbers from xrange(): 1 3 5 7 9
When a generator function is called for the first time, an object of the internal Generator class is returned. This object implements the Iterator interface in much the same way as a forward-only iterator object would, and provides methods that can be called to manipulate the state of the generator, including sending values to and returning values from it.