awesomite/iterators

模拟 PHP < 5.5 的 yield 功能

v1.0.0 2018-01-02 19:09 UTC

This package is auto-updated.

Last update: 2024-09-13 21:15:48 UTC


README

Codacy Badge Coverage Status Build Status

CallbackIterator

CallbackIterator 允许模拟 PHP 5.5 的 yield 功能。

PHP >= 5.5

<?php

function getAllFromDatabase($tableName)
{
    $page = 0;
    $perPage = 1000;
    while ($rows = Db::getRows($tableName, $page, $perPage)) {
        foreach ($rows as $row) {
            yield $row;
        }
        $page++;
    }
}

PHP < 5.5

<?php

use Awesomite\Iterators\CallbackIterator;

function getAllFromDatabase($tableName)
{
    $page = 0;
    $perPage = 1000;
    $rows = [];

    return new CallbackIterator(function () use (&$rows, $tableName, &$page, $perPage) {
        if (!$rows) {
            $rows = Db::getRows($tableName, $page, $perPage);
            $page++;
        }

        if ($rows) {
            return array_shift($rows);
        }

        CallbackIterator::stopIterate();
    });
}

版本管理

版本号遵循 语义版本控制 2.0.0 方案。