Jak w generatorze realizuje się to, że w bieżącym pliku znajduje się tylko jeden obiekt?
sobes.tech AI
Odpowiedź od AI
Generator w PHP jest zaimplementowany jako iterator, który pozwala na wstrzymanie wykonania funkcji i wznowienie jej później. Gdy jest używany w pętli foreach, działa na jednym obiekcie Generator w każdym momencie. Za każdym razem, gdy wywoływane jest yield, funkcja "zapamiętuje" swój stan (zmienne lokalne, pozycję wykonania) i zwraca wartość, generując element iteracji. Przy kolejnej iteracji pętli foreach, funkcja kontynuuje od miejsca, w którym została zatrzymana. W rzeczywistości obiekt Generator reprezentuje obiekt z stanem, który kontroluje stan iteracji.
<?php
function myGenerator() {
yield 1; // Funkcja jest wstrzymywana, zwracając 1
echo "Kontynuacja po 1\n";
yield 2; // Funkcja jest wstrzymywana, zwracając 2
echo "Kontynuacja po 2\n";
yield 3; // Funkcja jest wstrzymywana, zwracając 3
}
$generator = myGenerator(); // Tworzy się obiekt Generator
foreach ($generator as $value) {
echo "Otrzymana wartość: " . $value . "\n";
}
// W każdym momencie, zmienna $generator zawiera obiekt typu Generator.
// Kontroluje proces iteracji po generowanych wartościach.
?>
Zatem pojedynczy obiekt Generator kapsułkuje stan i logikę krok po kroku pobierania danych, umożliwiając obsługę potencjalnie dużych zbiorów danych bez ładowania ich w całości do pamięci.