CodeBlanks Logo Icon CodeBlanks

Generator sınıfı

PHP kursu · Uzman · Ders 2/54

Generator sınıfının current(), next() ve send() methodlarını öğrenirsin.

Generator sınıfı methodları

Bir yield içeren fonksiyon çağrılınca Generator nesnesi döner. Generator, Iterator arabirimini uygular; current() şu anki değeri, next() sonrakine geçer, valid() devam edilebilir mi diye bakar.

key() yield'in anahtarını verir; rewind() başa döner (yalnızca yineleme başlamadan önce). Bu methodlarla generator'ı elle yönetebilirsin.

send() ile geri gönderim

send($value) methodu, duran yield ifadesine değer geri gönderir. yield yalnızca değer üretmekle kalmaz, aynı zamanda bir ifade olarak değer alabilir: $received = yield $value;.

Bu sayede generator ile çift yönlü iletişim kurarsın. send('hello') çağrısında 'hello', yield ifadesinin sonucu olur ve yürüme bir sonraki yield'e kadar ilerler.

Uygulama Generator'ı elle yinele

$gen = countUp(5, 8) ile bir generator oluştur. while ($gen->valid()) döngüsü içinde current() ile değeri yazdır, sonra next() ile ilerle.

Örnek çözümü göster
while ($gen->valid()) döngüsü kur. İçinde echo $gen->current() . "\n"; ile şu anki değeri yazdır, sonra $gen->next(); ile ilerle.
Örnek çözüm:
<?php
function countUp(int $from, int $to): \Generator {
    for ($i = $from; $i <= $to; $i++) {
        yield $i;
    }
}

$gen = countUp(5, 8);

while ($gen->valid()) {
    echo $gen->current() . "\n";
    $gen->next();
}

Kendini test et

  1. İlk değeri current() ile al

    $gen = countUp(1, 3);
    echo $gen->____();
    
    Cevabı göster
    $gen = countUp(1, 3);
    echo $gen->current();
    
  2. send() methodu ne yapar?

    • Generator'a değer gönderir, yield ifadesinin sonucu olur
    • Generator'ı baştan başlatır
    • Generator'ı kalıcı olarak kapatır
    • Yalnızca bir sonraki değeri döndürür, değer göndermez
    Cevabı göster

    Generator'a değer gönderir, yield ifadesinin sonucu olur — Doğru. send($value), $value'i yield ifadesine geçirecek biçimde yürüme duran yield'den ilerletir.

  3. Generator methodlarını eşleştir

    current()
    Şu anki yield değerini döndürür
    next()
    Sonraki yield değerine ilerler
    valid()
    Daha fazla değer var mı kontrol eder
    send()
    yield ifadesine değer geri gönderir

Uzman bölümündeki tüm dersler