PHP 5.5 ve Yield Komutu

Standard

PHP 5.5 i incelemeye ve detaylandırmaya devam ediyoruz.. PHP 5.5 ile hayatımıza Üreticiler (generators) ve eşyordamlar (coroutines) eklendi.
Şimdi size Generators kısmına değineceğim yani kısaca yield komutu..

Basitçe ve kabaca anlatmak gerekirse bir metodda array’e toplayıp array’i return ettiğiniz işi yapmaktadır. İteratorlar ile kullanımı mantıklı olan bu komut size bellekte büyük kolaylık sağlayacaktır.

Hemen bir örnek ile detaylandırmak isterim:

<?php
$data = range(0, 1000000);
 
echo sprintf('%02.2f', (memory_get_usage() / 1048576))." MB of memory used\n";
 
// output: 137.92 MB of memory used
 
foreach ($data as $key => $val) {
    //echo "key: ".$key." value: ".$val."\n";
}
?>

Gördüğünüz gibi 137 mb ile kastık epeyce..

Şimdi birde yield ile örnekleyelim bu işlemi;

<?php
/**
 * Simple implementation of range() as a generator
 * @param int $start
 * @param int $end
 * @return void
 */
function range_yield($start, $end) {
    for ($index = $start; $index <= $end; $index++) {
        yield $index => $index;
    }
}
 
$data = range_yield(0, 1000000);
 
echo sprintf('%02.2f', (memory_get_usage() / 1048576))." MB of memory used\n";
 
// output: 0.22 MB of memory used
 
foreach ($data as $key => $val) {
    //echo "key: ".$key." value: ".$val."\n";
}

Sonuç kabak gibi ortada 🙂

Anlamayan veya daha fazla bilgi isteyenler için:
http://tr1.php.net/manual/tr/language.generators.syntax.php

Herkese İyi çalışmalar dilerim

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir