Kuidas generatoris rakendab seda, et praeguses failis sisaldab ainult ühte objekti?
sobes.tech AI
Vastus AI-lt
Generator (Generator) PHP-s on implementeeritud kui iterator, mis võimaldab funktsiooni täitmise peatada ja seda hiljem jätkata. Kui seda kasutatakse foreach tsüklis, töötab see ühe Generator objektiga igal ajal. Iga kord, kui kutsutakse välja yield, "mäletab" funktsioon oma olekut (kohalikke muutujaid, täitmise positsiooni) ja tagastab väärtuse, genereerides iteratsiooni elemendi. Järgmise foreach tsükli iteratsiooni ajal jätkub funktsioon sealt, kus ta peatati. Tegelikult esindab Generator objekt olekuga objekti, mis kontrollib iteratsiooni olekut.
<?php
function myGenerator() {
yield 1; // Funktsioon peatub ja tagastab 1
echo "Jätkub pärast 1\n";
yield 2; // Funktsioon peatub ja tagastab 2
echo "Jätkub pärast 2\n";
yield 3; // Funktsioon peatub ja tagastab 3
}
$generator = myGenerator(); // Loob Generator objekti
foreach ($generator as $value) {
echo "Saadud väärtus: " . $value . "\n";
}
// Igal ajal sisaldab muutuja $generator objekti tüüpi Generator.
// See kontrollib protsessi, kuidas iteratsioon toimub genereeritud väärtuste üle.
?>
Seega kapseldab üks Generator objekt oleku ja loogika, kuidas samm-sammult andmeid saada, võimaldades töödelda potentsiaalselt suuri andmekogusid ilma neid täielikult mälu sisse laadimata.