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
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.
Referans bu sembol, PHP Ne anlama geli...
&;|=&Quot quot; ne anlama geliyor? (bo...
Statik final serialVersionUİD alan ila...
MongoDB ASİT değil uyumlu olmak gerçek...
&; Acil modu" quot; OpenGL ne anla...