Konsep penjana (Generator) diperkenalkan dalam PHP7, yang menyediakan kaedah untuk mengendalikan jumlah data yang besar dan pemuatan malas dengan cekap. Artikel ini akan bermula dengan konsep dan prinsip, digabungkan dengan contoh kod khusus, untuk memperkenalkan penggunaan dan kelebihan penjana dalam PHP7.
Penjana ialah fungsi khas yang tidak mengembalikan semua data sekaligus, tetapi menjana data atas permintaan. Apabila fungsi melaksanakan pernyataan hasil, nilai yang dihasilkan pada masa ini akan dikembalikan dan keadaan fungsi akan disimpan. Pada kali seterusnya fungsi penjana dipanggil, fungsi meneruskan pelaksanaan dari keadaan sebelumnya sehingga ia menemui kenyataan hasil sekali lagi, dan kemudian mengembalikan nilai semula.
Faedah penjana ialah ia dapat mengurangkan penggunaan memori, terutamanya apabila memproses sejumlah besar data. Cara tradisional ialah menyimpan semua data dalam tatasusunan dan kemudian mengembalikannya kepada pemanggil sekaligus. Tetapi untuk jumlah data yang besar, pendekatan ini akan menduduki banyak ruang memori. Penjana hanya mengembalikan satu nilai pada satu masa dan tidak menduduki terlalu banyak memori sekaligus, sekali gus meningkatkan prestasi dan kecekapan program.
Yang berikut menggunakan kes praktikal untuk menggambarkan secara khusus penggunaan penjana. Katakan kita mempunyai fail yang sangat besar dengan setiap baris mengandungi nombor, dan kita mahu membaca fail dan mengembalikan kuasa dua semua nombor. Cara tradisional adalah dengan menyimpan semua nombor ke dalam tatasusunan dan kemudian petak setiap nombor dalam tatasusunan. Tetapi kaedah ini mengambil banyak ingatan. Kita boleh menggunakan penjana untuk menyelesaikan masalah ini.
// 生成器函数 function squareNumbers($filename) { $file = fopen($filename, 'r'); while (($line = fgets($file)) !== false) { $number = trim($line); yield $number * $number; } fclose($file); } // 使用生成器 $squares = squareNumbers('data.txt'); foreach ($squares as $square) { echo $square . " "; }
Kod di atas mentakrifkan fungsi penjana squareNumbers
, yang menerima nama fail sebagai parameter, kemudian menggunakan fungsi fopen
untuk membuka fail dan membaca baris kandungan fail mengikut baris. Setiap kali satu baris dibaca, nombor dalam baris tersebut adalah kuasa dua dan dikembalikan menggunakan pernyataan hasil
. Melalui pernyataan yield
, kita boleh mengembalikan setiap nilai yang dijana kepada pemanggil satu demi satu. squareNumbers
,它接受一个文件名作为参数,然后使用fopen
函数打开文件并逐行读取文件内容。每次读取一行后,将该行的数字平方后使用yield
语句返回。通过yield
语句,我们可以将每次生成的值逐个返回给调用者。
在主程序中,我们可以像迭代数组一样使用生成器,通过foreach
foreach
. Apa yang perlu diperhatikan di sini ialah fungsi penjana akan melaksanakan semula kod dalam badan fungsi penjana setiap kali ia dipanggil, dan bukannya melaksanakan keseluruhan fungsi. Ini mengelakkan memuatkan sejumlah besar data ke dalam memori sekaligus. Dengan menggunakan penjana, kami boleh memproses sejumlah besar data dengan cekap sama ada membaca data daripada fail, mendapatkan data daripada pangkalan data atau jenis operasi data lain, penjana boleh membantu kami mengurangkan penggunaan memori dan meningkatkan prestasi program. Selain mengendalikan sejumlah besar data, penjana juga boleh digunakan untuk memuatkan malas. Pemuatan malas merujuk kepada menjana data hanya apabila diperlukan, bukannya menjana semuanya sekali gus. Ini boleh berguna dalam situasi tertentu, terutamanya apabila bekerja dengan koleksi besar atau operasi yang perlu dijalankan untuk masa yang lama. Dengan menggunakan penjana, kami boleh menjana data hanya apabila diperlukan, dengan itu mengurangkan pengiraan yang tidak perlu dan penggunaan sumber. Ringkasnya, penjana dalam PHP7 menyediakan cara untuk mengendalikan sejumlah besar data dan pemuatan malas dengan cekap. Dengan menjana nilai satu demi satu dan bukannya sekaligus, kami boleh mengurangkan penggunaan memori dan meningkatkan prestasi dan kecekapan program. Dalam pembangunan sebenar, kami boleh menggunakan penjana secara fleksibel untuk meningkatkan kebolehbacaan dan kebolehselenggaraan kod. 🎜Atas ialah kandungan terperinci Penjana dalam PHP7: Bagaimana untuk mengendalikan sejumlah besar data dan pemuatan malas dengan cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!