Sobes.tech
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.