Sobes.tech
Middle+

Kā ģeneratorā tiek īstenots tas, ka pašreizējā failā ir tikai viens objekts?

sobes.tech AI

Atbilde no AI

Generator (Generator) PHP ir īstenots kā iteratoru, kas ļauj pārtraukt funkcijas izpildi un to turpināt vēlāk. Kad tas tiek izmantots foreach ciklā, tas darbojas ar vienu Generator objektu katru brīdi. Katru reizi, kad tiek izsaukts yield, funkcija "atceras" savu stāvokli (lokālās mainīgās, izpildes pozīcija) un atgriež vērtību, ģenerējot iterācijas elementu. Nākamajā foreach cikla iterācijā, funkcija turpina no vietas, kur tā bija apstājusies. Patiesībā, Generator objekts ir stāvokļa objekts, kas kontrolē iterācijas stāvokli.

<?php

function myGenerator() {
    yield 1; // Funkcija tiek pārtraukta, atgriežot 1
    echo "Turpinājums pēc 1\n";
    yield 2; // Funkcija tiek pārtraukta, atgriežot 2
    echo "Turpinājums pēc 2\n";
    yield 3; // Funkcija tiek pārtraukta, atgriežot 3
}

$generator = myGenerator(); // Tiek izveidots Generator objekts

foreach ($generator as $value) {
    echo "Saņemta vērtība: " . $value . "\n";
}

// Katru brīdi, mainīgais $generator satur `Generator` tipa objektu.
// Tas kontrolē iterācijas procesu pār ģenerētajām vērtībām.

?>

Tādējādi, viens Generator objekts ietver stāvokli un loģiku, kā soli pa solim iegūt datus, ļaujot apstrādāt potenciāli lielas datu kopas bez to pilnīgas ielādes atmiņā.