Sobes.tech
Middle+

Ako sa v generátore realizuje to, že v aktuálnom súbore je len jeden objekt?

sobes.tech AI

Odpoveď od AI

Generator (Generator) v PHP je implementovaný ako iterátor, ktorý umožňuje pozastaviť vykonávanie funkcie a neskôr ho pokračovať. Keď sa používa v cykle foreach, pracuje s jedným objektom Generator v každom momente. Pri každom volaní yield si funkcia "pamätá" svoj stav (lokálne premenné, pozíciu vykonávania) a vráti hodnotu, čím generuje prvok iterácie. Pri ďalšej iterácii cyklu foreach funkcia pokračuje od miesta, kde bola zastavená. V skutočnosti objekt Generator predstavuje stavový objekt, ktorý riadi stav iterácie.

<?php

function myGenerator() {
    yield 1; // Funkcia sa pozastaví a vráti 1
    echo "Pokračovanie po 1\n";
    yield 2; // Funkcia sa pozastaví a vráti 2
    echo "Pokračovanie po 2\n";
    yield 3; // Funkcia sa pozastaví a vráti 3
}

$generator = myGenerator(); // Vytvorí sa objekt Generator

foreach ($generator as $value) {
    echo "Získaná hodnota: " . $value . "\n";
}

// V každom momente obsahuje premenná $generator objekt typu Generator.
// Tento riadi proces iterácie cez generované hodnoty.

?>

Preto jeden Generator objekt kapsuluje stav a logiku krok za krokom získavania dát, čo umožňuje spracovávať potenciálne veľké množstvá dát bez ich úplného načítania do pamäti.