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.