Выбор ответа Senior Функции, замыкания, генераторы обновлено

Генератор и return

Вопрос

Что вернёт $gen->getReturn() после полного перебора генератора?

function import(iterable $rows): Generator {
    $n = 0;
    foreach ($rows as $row) {
        yield $row;
        $n++;
    }
    return $n;
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Значение из return внутри генератора. С PHP 7.0 генератор может завершиться return $value, и это значение доступно через getReturn() после завершения (до завершения будет исключение).

Варианты ответа

  1. null всегда: генераторы не могут возвращать значения
  2. Значение из return внутри генератораправильный ответ
  3. Последнее значение yield
  4. Количество выданных элементов

Разбор

С PHP 7.0 генератор может завершиться return $value, и это значение доступно через getReturn() после завершения (до завершения будет исключение). Так генератор может отдавать поток элементов и итог, например число обработанных строк. Последний yield это обычный элемент, а счётчик нужно вести самому.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.