Для чего нужен оператор yield в PHP

10 Января 2023 (ред)

Оператор yield — основа генераторной функции. Отдалённо этот оператор похож на оператор return , так как тоже реализует возврат, только вместо того, чтобы останавливать выполнение текущей функции, yield предоставляет значение коду, зацикливающемуся на генераторе, и приостанавливает выполнение функции генератора.

Для понимания, что делает yield, необходимо понимать, что такое генераторы. Генераторам же предшествуют итераторы. Когда вы создаёте список, вы можете считывать его элементы один за другим — это называется итерацией.

Генераторы это тоже итерируемые объекты, но прочитать их можно лишь один раз. Это связано с тем, что они не хранят значения в памяти, а генерируют их на лету.

Чтобы освоить yield, вы должны понимать, что когда вы вызываете функцию, код внутри тела функции не исполняется. Функция только возвращает объект-генератор.

Пример простейшего генератора:

function genFingersOnTheHand() {
   for ($i = 1; $i <= 5; $i++) {
      // Здесь оператор yield возвращает значение и ожидает следующего цикла.
      yield $i;     
   }
}

$generator = genFingersOnTheHand();
foreach($generator as $value) {
   echo "$value ";
}

Приведённый пример выведет строку "1 2 3 4 5 " по результатам всех пяти циклов генератора.

Для ответа вы можете авторизоваться


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.