Rumah >pembangunan bahagian belakang >tutorial php >Apakah penjana dalam PHP? Bagaimana untuk menggunakan

Apakah penjana dalam PHP? Bagaimana untuk menggunakan

青灯夜游
青灯夜游ke hadapan
2021-09-27 20:12:223758semak imbas

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>";
}
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
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>";
}
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>";
}
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;
    }
}
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>";
}
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;
    }
}
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>";
}

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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam