Как в генератора реализира това, че в текущия файл съдържа само един обект?
sobes.tech AI
Отговор от AI
Генераторът (Generator) в PHP е реализиран като итератор, който позволява да се спира изпълнението на функция и да се възобновява по-късно. Когато се използва в цикъл foreach, работи с един обект Generator във всеки момент. Всеки път, когато се извика yield, функцията "запомня" своето състояние (локални променливи, позиция на изпълнение) и връща стойност, генерирайки елемент от итерацията. При следващата итерация на цикъла foreach, функцията продължава от мястото, където е била спряна. В действителност, обектът Generator представлява състояние-уязвим обект, който управлява състоянието на итерацията.
<?php
function myGenerator() {
yield 1; // Функцията се спира и връща 1
echo "Продължение след 1\n";
yield 2; // Функцията се спира и връща 2
echo "Продължение след 2\n";
yield 3; // Функцията се спира и връща 3
}
$generator = myGenerator(); // Създава се обект Generator
foreach ($generator as $value) {
echo "Получена стойност: " . $value . "\n";
}
// Във всеки момент променливата $generator съдържа обект от тип Generator.
// Той управлява процеса на итерация върху генерираните стойности.
?>
Следователно, един единствен обект Generator капсулира състоянието и логиката за стъпково получаване на данни, което позволява обработка на потенциално големи набори от данни без да ги зарежда изцяло в паметта.