Generators no PHP \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 14 Horas 

 49 Min 

 25 Seg 

   Tempo restante da oferta: 14 49 25 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Generators no PHP  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Generators no PHP

 Saiba o que são Iterators e Generators, bem como os seus casos de uso.

 [ Kennedy Tedesco ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/iterators-php.png)  

iterGenerators foram adicionados no [PHP](https://www.treinaweb.com.br/blog/o-que-e-php/ "PHP") na versão 5.5 (meados de 2013) e aqui estamos nós, anos depois, falando sobre eles. É que esse ainda não é um assunto muito difundido, digo, não é trivial encontrar casos e mais casos de uso para eles no contexto padrão de desenvolvimento para o PHP. Normalmente o uso deles fica abstraído em libraries e frameworks.

Mas, antes de tudo, é importante entendermos o que são *Iterators*, ademais, *Iterators* e *Generators* são assuntos intrinsecamente relacionados.

Para isso, recomendo a leitura do artigo: [Iterators no PHP](https://www.treinaweb.com.br/blog/iterators-no-php)

Todos os exemplos desse artigo estão disponíveis no repositório: https://github.com/KennedyTedesco/php-iterators-generators

[  ![PHP - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Curso PHP - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/php-fundamentos)

**O que é um Generator?**

Numa explicação acessível, *Generators* são uma forma prática de se implementar *Iterators*. Isso quer dizer que, com Generators, podemos implementar complexos **Iterators** sem que precisemos criar objetos, implementar interfaces e tudo mais que vimos anteriormente. Generators dão para uma função a capacidade de retornar uma sequência de valores.

Para criar uma função *Generator*, basta que ela possua a palavra reservada `yield`. O operador `yield` é uma espécie de `return`, só que com algumas particularidades. E uma função desse tipo retorna um objeto da classe [Generator](https://secure.php.net/manual/en/class.generator.php), que é uma classe especial e específica para esse contexto, não sendo possível utilizá-la de outra forma. Esse objeto retornado pode ser iterado. É aí que entra a nossa base sobre *Iterators* que aprendemos anteriormente. A classe *Generator* implementa a interface *Iterator*.

Vejamos o exemplo mais elementar possível de uma função generator:

```php
