Sobes.tech
Middle+

Ինչպե՞ս է գեներատորում իրականացվում այն, որ ընթացիկ ֆայլում միայն մեկ օբյեկտ կա։

sobes.tech AI

Պատասխան AI-ից

PHP-ում Generator (Generator)-ը իրականացվում է որպես iterator, որը թույլ է տալիս դադարեցնել ֆունկցիայի կատարմանը և հետագայում շարունակել այն։ Երբ այն օգտագործվում է 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 օբյեկտը կուպուրում է վիճակը և քայլ առ քայլ տվյալներ ստանալու տրամաբանությունը, ինչը թույլ է տալիս աշխատել հնարավորինս մեծ տվյալների հավաքածուների հետ առանց դրանք ամբողջությամբ հիշողության մեջ բեռնելու։