Генераторы в PHP(yield). Пример работы генератора.
Начиная с версии PHP 5.5 были добавлены генераторы. Для работы с генератором используется ключевое слово yield. Особенность генераторов в том, что состояние выполнения функции запоминается в момент вызова yield. Сам я до появления генераторов мог реализовать аналогичное с использованием классов, поэтому явной необходимости в применении генераторов, тем не менее в одной из рабочих задач столкнулся с их применением другим программистом который писал код до меня. Полагаю что одним из лучших вариантов посмотреть как именно работают генераторы в PHP - проанализировать следующий код и результат его выполнения.
Обратите внимание я умышленно разместил в генераторе вызов return 555; - в данном случаи выполнение данной строчки не приведет к возврату значения 555 из генератора, то есть значения из генератора необходимо возвращать через yield, при этом строчка после строки return выполнена не будет. То-есть не смотря на то что return не возвращает значения из генератора, тем не менее return прерывает работу генератора.
Результат выполнения PHP кода с применением генератора(yield)
Если вызвать var_dump(nums()); результатом выполнения будет: "object(Generator)#1 (0) { }". А вызов echo nums(); приведёт к появлению ошибки: "Catchable fatal error: Object of class Generator could not be converted to string in /var/www/html/test.php on line 13".