SlideShare uma empresa Scribd logo
Generators
Onde e como
return
Interrompe a execução e retorna
um valor definido;
yield
Pausa a execução e pode retornar
uma sequência de valores.
The heart of a generator function is the yield keyword.
In its simplest form, a yield statement looks much like a return statement,
except that instead of stopping execution of the function and returning,
yield instead provides a value to the code looping over the generator and
pauses execution of the generator function.
https://www.php.net/manual/en/language.generators.syntax.php
O que é
yield "foo";
Lazy Evaluation Memory Efficient
Por que usar?
Executar somente
quando necessário
Somente é usado que é
demandado, o que
economiza recurso de
memória
E o Illuminate (Laravel)?
https://github.com/laravel/framework/pull/29415
https://laravel.com/docs/8.x/collections#lazy-collections
use IlluminateSupportLazyCollection
;
$collection = LazyCollection::times(
1000 * 1000 * 1000)
->filter(fn ($number) => $number %2 == 0)
->take(1000);
Após a versao 6.x o Illuminate adicionou a feature de
LazyCollections que por detrás dos panos usa generators
Fatal error: Allowed memory size of 134217728 bytes
exhausted (tried to allocate 33554440 bytes) in ...
O uso de Generators pode evitar a essa
mensagem de erro, porém lembre que
isso não é uma bala de prata!
Avalie o uso e também como está a
implementação do código, senão o
Generator não vai te salvar
Massa, mas não entendi nada
Então vamos pro código
Generator implements Iterator {
/* Métodos */
public current ( ) : mixed
public key ( ) : mixed
public next ( ) : void
public rewind ( ) : void
public send ( mixed $value ) : mixed
public throw ( Exception $exception ) : mixed
public valid ( ) : bool
public __wakeup ( ) : void
}
function zezeDeCamargoELuciano () {
$lyrics = yield;
print "Pare! Até quando você quer mandar. $lyrics".
PHP_EOL;
$lyrics = yield;
print "Pare! Meus desejos e suas vontades. $lyrics".
PHP_EOL;
$lyrics = yield;
print "Então, PARE! $lyrics". PHP_EOL;
}
$run = zezeDeCamargoELuciano ();
$run->send("E mudar minha vida" );
$run->send("Estão divididas" );
print "..." . PHP_EOL;
print "Solidão está matando a gente
Sufocando a nossa paixão" . PHP_EOL;
$run->send("Liberta o meu coração" );
Exemplo #1
function dividers(int $ofNumber) {
for ($i = 1; $i <= $ofNumber; $i++) {
if ($ofNumber % $i === 0) {
yield $i;
}
}
}
function misc() {
yield 0;
yield from dividers(** **);
yield 777;
}
foreach (misc() as $g) {
print $g . PHP_EOL;
}
Exemplo #2
use IlluminateSupportLazyCollection ;
function dumpMemory($executor)
{
$before = memory_get_peak_usage();
return tap($executor(), function () use ($before) {
$after = memory_get_peak_usage();
var_dump($after - $before);
});
}
dumpMemory(function() {
LazyCollection ::times(1000000)->map(fn($number) => $number*2);
});
Exemplo #3
use IlluminateSupportCollection;
function dumpMemory($executor)
{
$before = memory_get_peak_usage();
return tap($executor(), function () use ($before) {
$after = memory_get_peak_usage();
var_dump($after - $before);
});
}
dumpMemory(function() {
Collection::times(1000000)->map(fn($number) => $number*2);
});
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to
allocate 33554440 bytes) in ...
Exemplo #4
PHP 8 e Fibers
Fiber é um bloco de código que mantém sua própria
pilha (variáveis e estado), que pode ser iniciada, suspensa
ou encerrada cooperativamente pelo código principal e
pela Fiber.
Links
https://www.php.net/manual/en/language.generators.overview.php
https://josephsilber.com/posts/2020/07/29/lazy-collections-in-laravel
https://laravel.com/docs/8.x/collections#lazy-collections
https://dev.to/developertharun/4-ways-to-use-generator-functions-in-javascript-examples-adv
antages-2ohd
https://dev.to/jmau111/make-sense-of-generators-doa
https://adamwathan.me/refactoring-to-collections/

Mais conteúdo relacionado

Mais procurados

Introdução ao php - Condicionais e Laços de repetição
Introdução ao php - Condicionais e Laços de repetiçãoIntrodução ao php - Condicionais e Laços de repetição
Introdução ao php - Condicionais e Laços de repetição
gbpf
 
Introdução ao php - Tipos de Operadores
Introdução ao php - Tipos de OperadoresIntrodução ao php - Tipos de Operadores
Introdução ao php - Tipos de Operadores
gbpf
 
Introdução ao php - Tipos de variáveis
Introdução ao php - Tipos de variáveisIntrodução ao php - Tipos de variáveis
Introdução ao php - Tipos de variáveis
gbpf
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
Bruno Cunha
 
Al sweigart, cap 3
Al sweigart, cap 3Al sweigart, cap 3
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
Luis Gustavo Almeida
 
Revisao php
Revisao phpRevisao php
Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012
Hugo Magalhães
 
Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
Jean Carlo Machado
 
Php
PhpPhp
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
Cristiano Pires Martins
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
Regis Magalhães
 
Symfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividadeSymfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividade
Hugo Magalhães
 
Bons cheiros, como programar melhor ?
Bons cheiros, como programar melhor ?Bons cheiros, como programar melhor ?
Bons cheiros, como programar melhor ?
COTIC-PROEG (UFPA)
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
Regis Magalhães
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
Dalton Martins
 
Variáveis
VariáveisVariáveis
Variáveis
Denis Katko
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
W3P Projetos Web
 

Mais procurados (19)

Introdução ao php - Condicionais e Laços de repetição
Introdução ao php - Condicionais e Laços de repetiçãoIntrodução ao php - Condicionais e Laços de repetição
Introdução ao php - Condicionais e Laços de repetição
 
Introdução ao php - Tipos de Operadores
Introdução ao php - Tipos de OperadoresIntrodução ao php - Tipos de Operadores
Introdução ao php - Tipos de Operadores
 
Introdução ao php - Tipos de variáveis
Introdução ao php - Tipos de variáveisIntrodução ao php - Tipos de variáveis
Introdução ao php - Tipos de variáveis
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Al sweigart, cap 3
Al sweigart, cap 3Al sweigart, cap 3
Al sweigart, cap 3
 
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
 
Revisao php
Revisao phpRevisao php
Revisao php
 
Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012
 
Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
 
Php
PhpPhp
Php
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
 
Symfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividadeSymfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividade
 
Bons cheiros, como programar melhor ?
Bons cheiros, como programar melhor ?Bons cheiros, como programar melhor ?
Bons cheiros, como programar melhor ?
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
 
Variáveis
VariáveisVariáveis
Variáveis
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 

Semelhante a Generators PHP

Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Willian Magalhães
 
Introdução ao php
Introdução ao phpIntrodução ao php
Introdução ao php
Tiago Davi
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
Allen Gomes Vidal
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Php
PhpPhp
Php
alineqs
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
Sérgio Souza Costa
 
Introdução PHP + Kohana 3
Introdução PHP + Kohana 3Introdução PHP + Kohana 3
Introdução PHP + Kohana 3
Adir Kuhn
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
George Mendonça
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
brunobione
 
Aula4
Aula4Aula4
Aula4
softeam
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
Andre Golvea
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
Lucas Batistussi
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
Leonn Leite
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
tdc-globalcode
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
joaocarlobarros
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
diogoa21
 
PHP - Uma Pequena Introducao
PHP - Uma Pequena IntroducaoPHP - Uma Pequena Introducao
PHP - Uma Pequena Introducao
jonatasoliveira
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
garux
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
Eduardo Mendes
 

Semelhante a Generators PHP (20)

Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Introdução ao php
Introdução ao phpIntrodução ao php
Introdução ao php
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Php
PhpPhp
Php
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Introdução PHP + Kohana 3
Introdução PHP + Kohana 3Introdução PHP + Kohana 3
Introdução PHP + Kohana 3
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 
Aula4
Aula4Aula4
Aula4
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
PHP - Uma Pequena Introducao
PHP - Uma Pequena IntroducaoPHP - Uma Pequena Introducao
PHP - Uma Pequena Introducao
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 

Generators PHP