Sobes.tech
Middle+

Kako se u generatoru implementira to što u trenutnoj datoteci postoji samo jedan objekat?

sobes.tech АИ

Одговор од АИ

Generator (Generator) u PHP-u implementiran je kao iterator koji omogućava pauziranje izvršavanja funkcije i njegovo kasnije nastavljanje. Kada se koristi u foreach petlji, radi sa jednim Generator objektom u bilo kom trenutku. Svaki put kada se pozove yield, funkcija "se seća" svog stanja (lokalne promenljive, pozicija izvršavanja) i vraća vrednost, generišući element iteracije. Pri sledećoj iteraciji foreach petlje, funkcija nastavlja od mesta gde je stala. U suštini, Generator objekat predstavlja stanje-osećeni objekat koji kontroliše stanje iteracije.

<?php

function myGenerator() {
    yield 1; // Funkcija se pauzira i vraća 1
    echo "Nastavak posle 1\n";
    yield 2; // Funkcija se pauzira i vraća 2
    echo "Nastavak posle 2\n";
    yield 3; // Funkcija se pauzira i vraća 3
}

$generator = myGenerator(); // Kreira se Generator objekat

foreach ($generator as $value) {
    echo "Dobijena vrednost: " . $value . "\n";
}

// U svakom trenutku, promenljiva $generator sadrži objekat tipa Generator.
// Ona kontroliše proces iteracije preko generisanih vrednosti.

?>

Dakle, jedan Generator objekat inkapsulira stanje i logiku za postepeno dobijanje podataka, omogućavajući obradu potencijalno velikih skupova podataka bez njihovog potpunog učitavanja u memoriju.