Apakah penjana dalam PHP? Bagaimana untuk menggunakan

青灯夜游
Lepaskan: 2023-04-10 17:14:02
ke hadapan
3711 orang telah melayarinya

Apakah penjana dalam PHP? Bagaimana untuk menggunakan

Apabila bercakap tentang pemanduan, kelajuan bukanlah segala-galanya. Tetapi di web, kelajuan membuat semua perbezaan. Lebih pantas aplikasi anda, lebih baik pengalaman pengguna. Artikel ini adalah mengenai penjana Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan, jadi mengapa kita bercakap tentang kelajuan? Anda akan mendapati dengan cepat bahawa penjana memainkan peranan yang besar dalam pengurusan kelajuan dan ingatan.

Apakah Penjana Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan?

Penjana telah ditambahkan dalam Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan 5.5 dan menyediakan cara yang mudah untuk mengulangi data tanpa membina tatasusunan dalam ingatan. Adakah anda sedikit keliru? Kemudian berikan satu contoh untuk menunjukkan bahawa menggunakan penjana adalah cara yang baik.

Pertama sekali, buat fail

generator.php yang akan digunakan sepanjang contoh kami. Selepas mencipta fail, kami menambah sekeping kod.

<?php function getRange ($max = 10) {
    $array = [];

    for ($i = 1; $i < $max; $i++) {
        $array[] = $i;
    }

    return $array;
}

foreach (getRange(15) as $range) {
    echo "Dataset {$range} <br>";
}
Salin selepas log masuk
Kami boleh memulakan pelayan Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan terbina dalam dengan cepat dalam direktori tempat fail

generator.php dicipta:

php -S localhost:8000
Salin selepas log masuk
Jika anda membuka http dengan penyemak imbas: //localhost:8000/generator.php , kita sepatutnya melihat sesuatu seperti ini:

Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan

Kod ini tidak begitu jelas Kod bit

<?php foreach (getRange(Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX) as $range) {
    echo "Dataset {$range} <br>";
}
Salin selepas log masuk
Kini, nilai maksimum yang boleh dijana oleh kod di atas ialah

Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX (iaitu nilai maksimum yang boleh dihasilkan oleh Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan apabila kita mengubah suainya seperti ini dan segarkan semula penyemak imbas, Kami dapati sesuatu yang berbeza kali ini Skrip penjana melemparkan mesej amaran.

Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan

Sayang kerana Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan kehabisan memori Penyelesaiannya mungkin termasuk meningkatkan had atas

memory_limit dalam fail php.ini Tetapi untuk bersikap adil, skrip ini tidak cekap dan memerlukan memori yang cekap dan satu skrip memori rendah.

Menggunakan Penjana

Mari tentukan fungsi yang sama di atas, panggil dengan nilai yang sama

Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX dan jalankannya semula. Tetapi kali ini kita akan mencipta fungsi penjana.

<?php function getRange ($max = 10) {
    for ($i = 1; $i < $max; $i++) {
        yield $i;
    }
}

foreach (getRange(Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX) as $range) {
    echo "Dataset {$range} <br>";
}
Salin selepas log masuk
Menghuraikan fungsi

, kali ini, kita hanya mengulangi nilai dan getRange output. yield adalah serupa dengan mengembalikan nilai kerana ia juga mengembalikan nilai daripada fungsi, tetapi satu-satunya perbezaan ialah yield hanya akan mengembalikan nilai apabila diperlukan dan tidak akan cuba menyimpan keseluruhan set data dalam ingatan. yield

Jika anda pergi ke penyemak imbas anda, anda sepatutnya melihat data yang dipaparkan pada halaman. Memandangkan masa yang sesuai, pelayar akhirnya memaparkan data.

Nota: Penjana hanya boleh digunakan dalam fungsi.

Mengapa menggunakan penjana

Kadangkala, kita mungkin menghadapi situasi di mana kita ingin menghuraikan set data yang besar (mungkin fail log), atau set hasil pangkalan data yang besar Lakukan pengiraan, dsb. . Kami tidak mahu semua data ini dimuatkan ke dalam memori. Kita harus menyimpan keadaan memori yang sepadan sebanyak mungkin. Data tidak semestinya besar - penjana adalah cekap tidak kira betapa kecilnya data itu. Jangan lupa, matlamat kami adalah untuk menggunakan kurang memori untuk memproses data secepat mungkin.

Kembalikan pasangan nilai kunci

Kadangkala, data kami lebih meyakinkan apabila ia berdasarkan nilai kunci. Apabila menggunakan penjana, kami mungkin menjana pasangan nilai kunci seperti berikut.

<?php function getRange ($max = 10) {
    for ($i = 1; $i < $max; $i++) {
        $value = $i * mt_rand();

        yield $i => $value;
    }
}
Salin selepas log masuk
Kemudian, kita boleh menggunakan pasangan nilai kunci ini sama seperti mana-mana tatasusunan.

<?php foreach (getRange(Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX) as $range => $value) {
    echo "Dataset {$range} has {$value} value<br>";
}
Salin selepas log masuk
Masukkan parameter ke dalam penjana

Penjana juga boleh menerima parameter. Ini bermakna penjana membenarkan kita menyuntik parameter ke dalamnya, sebagai arahan atau fungsi lain. Sebagai contoh, kami menghantar nilai kepada penjana untuk menghentikan pelaksanaannya atau mengubah suai outputnya. Menggunakan fungsi

di atas, kita boleh mencapai ini. getRange

<?php function getRange ($max = 10) {
    for ($i = 1; $i < $max; $i++) {
        $injected = yield $i;

        if ($injected === &#39;stop&#39;) return;
    }
}
Salin selepas log masuk
Untuk menghantar suntikan nilai ini kita boleh lakukan ini.

<?php $generator = getRange(Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX);

foreach ($generator as $range) {
    if ($range === 10000) {
        $generator->send('stop');
    }

    echo "Dataset {$range} <br>";
}
Salin selepas log masuk

Nota: Menggunakan pulangan dalam penjana akan melompat keluar daripada penjana.

Jangan menyalahgunakan penjana

Walaupun menggunakan

Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX agak berlebihan Tetapi bagi saya, Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan_INT_MAX adalah 2147483. 🎜> Iaitu:

Dua bilion empat ribu tujuh ratus empat puluh ribu empat ratus lapan puluh tiga ribu enam ratus empat puluh tujuh

Penjana menjadikan penggunaan memori lebih banyak cekap. Tetapi jika disalahgunakan, ia juga boleh menyebabkan masalah berkaitan ingatan.

Ringkasan

Penjana memberikan peningkatan prestasi ketara yang sukar diabaikan. Selalunya, kami tidak memerlukan pelayan konfigurasi tinggi untuk menjalankan kod. Kita hanya perlu melakukan sedikit pemfaktoran semula, penjana sangat berguna dan kita harus menggunakannya lebih

Alamat asal bahasa Inggeris: https://scotch.io/tutorials/understanding-php-generators

Pembelajaran yang disyorkan: "Tutorial Video Apakah penjana dalam Apakah penjana dalam PHP? Bagaimana untuk menggunakan? Bagaimana untuk menggunakan"

Atas ialah kandungan terperinci Apakah penjana dalam PHP? Bagaimana untuk menggunakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!