SORU
5 Temmuz 2013, Cuma


Verim PHP ne anlama geliyor?

Son zamanlarda bu kodu buldum:

function xrange($min, $max) 
{
    for ($i = $min; $i <= $max; $i  ) {
        yield $i;
    }
}

Daha önce hiç yield Bu anahtar sözcük gördüm. Kod çalıştırmak için çalışıyorum

Ayrıştırma hatası: sözdizimi hatası, line x beklenmedik T_VARİABLE

Bu yield anahtar kelime nedir? Hatta geçerli PHP mi? Ve eğer değilse, nasıl kullanırım?

CEVAP
5 Temmuz 2013, Cuma


yield nedir?

yield anahtar kelime returns data from a generator function:

Jeneratör bir işlev kalp verim anahtar kelimedir. Onun en basit haliyle, bir yield deyimi görünüyor gibi bir geri bildirim, dışında yerine yürütme durdurma fonksiyonu ve dönen, verim yerine sağlar bir değere kodu döngü içinde jeneratör ve duraklar yürütme jeneratör işlevi.

Bir jeneratör işlevi nedir?

Jeneratör bir işlevi etkin bir şekilde Iterator bir yaz daha kompakt ve verimli bir yoldur. Hiç bir işlev (xrange) tanımlamanızı sağlarhesaplar ve döndürürdeğerlersürelooping over it:

foreach (xrange(1, 10) as $key => $value) {
    echo "$key => $value", PHP_EOL;
}

Bu aşağıdaki çıktıyı oluşturur:

0 => 1
1 => 2
…
9 => 10

Ayrıca kullanarak foreach $key kontrol edebilirsiniz

yield $someKey => $someValue;

$key $someValue görünür $val değeri olmak istiyorsan, $someKey jeneratör işlevi. Soru $i Bu örnek.

Normal işlevlerine fark nedir?

Şimdi sadece PHP yerli range function çıkış elde etmek için kullanıyoruz. neden acaba. Ve haklısın. Çıktısı aynı olacaktır. Fark var.

Biz range PHP kullanmak, çalıştırmak, return bellek numaraları tüm diziyi oluşturuntüm dizio zaman oraya git ve değerleri çıktı foreach döngü için. Diğer bir deyişle, foreach dizinin kendisi üzerinde çalışır. range fonksiyonu foreach sadece "konuşmak" bir kez. Postayla bir paket almak gibi düşün. Kurye paket ve izin verecek. Ve sonra tüm paketi, içeride ne varsa alarak dışarı çıkar.

Jeneratör Fonksiyon kullanımı, PHP de sonunda ya yield bir anahtar kelime yerine getirene kadar işlevi içine adım ve çalıştırmak. yield, karşılaşınca sonra dış döngü o zaman değeri ne olursa olsun dönecektir. Geri jeneratör işlevi girer nispetinde yerden devam eder. xrange for bir döngü tutar beri, $max gelene kadar yürütmek ve verecektir. foreach ve jeneratör oyun ping pong gibi düşün.

Neden buna ihtiyacım var mı?

Açıkçası, jeneratörler bellek sınırları geçici bir çözüm bulmak için kullanılabilir. Ortamınıza bağlı olarak, range(1, 1000000) jeneratör ile aynı ise senaryonu önemli bir işin sadece iyi çalışır. Ya da Wikipedia dediği gibi:

Jeneratörler sadece talep edilen değerlerini hesaplamak için, ya da aynı anda hesaplamak için pahalı imkansız dizileri temsil için yararlıdır. Bunlar, örneğin, sonsuz diziler ve canlı veri akışı vardır.

Jeneratörler de çok hızlı olması gerekiyor. Ama hızlı konuşurken, genellikle çok az sayıda konuşuyoruz unutmayın. Şimdi kaçıp tüm kod jeneratör kullanmak değiştirmeden bir ölçü olarak anlamlı olduğu görmek de öyle.

Jeneratörler için başka bir Kullanım örneği, zaman uyumsuz coroutines. yield anahtar sadece değerleri döndürmüyor ama aynı zamanda onları kabul eder. Bu ayrıntılar için, iki mükemmel blog gönderilerini aşağıda bağlantısı bakın.

Ne zamandan beri yield kullanabilir miyim?

Jeneratörler tanıttıPHP 5.5. Bu sürüm önce yield kullanmaya çalışan çeşitli ayrıştırma hataları, anahtar kelime, aşağıdaki kodu bağlı olarak sonuçlanacaktır. Eğer bu kod ayrıştırma hatası alırsanız, PHP güncelleyin.

Kaynaklar ve daha fazla bilgi:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008
  • EvilControllers

    EvilControll

    20 Ocak 2008
  • newport83

    newport83

    19 HAZİRAN 2006