Перебор генераторов с помощью while

Я пишу оболочку PDO для нового проекта. Очень распространенный шаблон для SQL - написать такой оператор, как

while ($row = $connection->fetch($sql)) {
    ...
}

Моя функция-обертка по сути такова:

public function fetch($query, $bindings)
{
    $stmt = $this->getPdo()->prepare($query);

    $stmt->execute($bindings);

    $stmt->setFetchMode($this->getFetchMode());

    foreach ($stmt as $record) {
        yield $record;
    }
}

Но я не могу использовать значения, если я называю это с помощью while петля, как указано выше. Делать var_dump Говорит, что $row является объектом-генератором. Если я использую foreach, var_dump показывает данные базы данных, как и ожидалось. Разве просто невозможно пройти через генераторы, используя whileИли я где-то здесь запутался?

1 ответ

Решение

Разве невозможно перебрать генераторы, использующие while, или я где-то здесь запутался?

Вы запутались;) В вашем примере кода:

while ($row = $connection->fetch($sql)) {

Вы на самом деле казнить fetch() для каждой итерации цикла. С генераторами, которые вы обычно используете foreach():

foreach ($connection->fetch($sql) as $row) {
Другие вопросы по тегам