Middle+
Jak je v generátoru realizováno, že v aktuálním souboru je pouze jeden objekt?
sobes.tech AI
Odpověď od AI
Generátor (Generator) v PHP je implementován jako iterátor, který umožňuje pozastavit provádění funkce a později jej znovu spustit. Když je použit v cyklu foreach, pracuje s jedním objektem Generator v každém okamžiku. Při každém volání yield si funkce "zapamatuje" svůj stav (místní proměnné, pozici provádění) a vrátí hodnotu, čímž generuje prvek iterace. Při další iteraci cyklu foreach pokračuje funkce tam, kde skončila. Ve skutečnosti objekt Generator představuje stavový objekt, který řídí stav iterace.
<?php
function myGenerator() {
yield 1; // Funkce se pozastaví a vrátí 1
echo "Pokračování po 1\n";
yield 2; // Funkce se pozastaví a vrátí 2
echo "Pokračování po 2\n";
yield 3; // Funkce se pozastaví a vrátí 3
}
$generator = myGenerator(); // Vytvoří se objekt Generator
foreach ($generator as $value) {
echo "Získaná hodnota: " . $value . "\n";
}
// V každém okamžiku obsahuje proměnná $generator objekt typu Generator.
// Tento řídí proces iterace přes generované hodnoty.
?>
Tedy jediný objekt Generator kapsuluje stav a logiku krok za krokem získávání dat, což umožňuje zpracovávat potenciálně velké datové sady bez jejich úplného načtení do paměti.