mata teras
- PHP Generator menyediakan cara mudah untuk melaksanakan iterator tanpa memerlukan antara muka Iterator yang kompleks, tetapi sebaliknya gunakan kata kunci
- dan bukannya
yield
untuk menyelamatkan keadaannya dan terus dari gangguan apabila dipanggil semula.return
Penjana sangat menjimatkan ingatan apabila bekerja dengan dataset yang besar, kerana mereka hanya perlu memperuntukkan memori untuk hasil semasa, tanpa menyimpan semua nilai dalam ingatan sekaligus seperti array. - Walaupun penjana berfungsi seperti iterator, ia pada dasarnya merupakan fungsi yang mengembalikan dan menerima nilai luaran dengan memanggil kaedah
- objek penjana. Ia juga boleh digunakan dalam penjana lain, yang dipanggil perwakilan penjana.
send()
bagaimana penjana berfungsi
Menurut definisi Wikipedia, penjana adalah "sangat mirip dengan fungsi yang mengembalikan array, kerana penjana mempunyai parameter yang boleh dipanggil dan menghasilkan satu siri nilai". Penjana pada dasarnya adalah fungsi biasa, tetapi bukannya mengembalikan nilai, ia menghasilkan seberapa banyak nilai yang diperlukan. Ia kelihatan seperti fungsi, tetapi berkelakuan seperti iterator. Penjana menggunakan kata kunci dan bukannya yield
. Ia berfungsi sama dengan return
kerana ia mengembalikan nilai kepada pemanggil fungsi, tetapi return
tidak mengeluarkan fungsi dari timbunan, tetapi menjimatkan keadaannya. Ini membolehkan fungsi untuk meneruskan pelaksanaan dari gangguan. Malah, anda tidak boleh mengembalikan nilai dari penjana, walaupun anda boleh menamatkan pelaksanaannya dengan yield
tanpa nilai. Manual PHP menyatakan: "Apabila fungsi penjana dipanggil, ia mengembalikan objek yang boleh diulang." Apabila anda melangkah ke atas objek, PHP memanggil penjana setiap kali nilai diperlukan. Apabila penjana menjana nilai, keadaan disimpan supaya ia dapat dipulihkan apabila nilai seterusnya diperlukan. return
<?php function nums() { echo "The generator has started\n"; for ($i = 0; $i < 5; $i++) { yield $i; echo "Yielded $i\n"; } echo "The generator has ended\n"; } foreach (nums() as $v); ?>output kod di atas akan menjadi:
<code>The generator has started Yielded 0 Yielded 1 Yielded 2 Yielded 3 Yielded 4 The generator has ended</code>
Penjana pertama kami
Generator bukan konsep baru. Berikut adalah contoh python:
yield
def file_lines(filename): file = open(filename) for line in file: yield line file.close() for line in file_lines('somefile'): #do some work here
<?php function nums() { echo "The generator has started\n"; for ($i = 0; $i < 5; $i++) { yield $i; echo "Yielded $i\n"; } echo "The generator has ended\n"; } foreach (nums() as $v); ?>
Fungsi penjana membuka fail dan kemudian menghasilkan setiap baris fail yang diperlukan. Setiap kali penjana dipanggil, ia terus dilaksanakan dari gangguan. Ia tidak bermula dari awal kerana apabila pernyataan yield
dilaksanakan, keadaannya disimpan. Sebaik sahaja semua baris dibaca, penjana hanya tamat dan gelung berakhir.
Kunci kembali
PHP Iterator terdiri daripada pasangan kunci/nilai. Dalam contoh kami, hanya satu nilai yang dikembalikan, jadi kunci adalah nombor (secara lalai kekunci adalah nombor). Jika anda ingin mengembalikan pasangan yang berkaitan, hanya ubah pernyataan yield
untuk memasukkan kunci menggunakan sintaks array.
<code>The generator has started Yielded 0 Yielded 1 Yielded 2 Yielded 3 Yielded 4 The generator has ended</code>
Nilai suntikan
yield
bukan sahaja mengembalikan nilai; ia juga boleh menerima nilai luaran. Ini dilakukan dengan memanggil kaedah send()
objek penjana dengan nilai yang anda mahu lulus. Nilai ini kemudiannya boleh digunakan untuk mengira atau melaksanakan operasi lain. Kaedah ini menghantar nilai sebagai hasil ungkapan yield
kepada penjana dan meneruskan pelaksanaan.
def file_lines(filename): file = open(filename) for line in file: yield line file.close() for line in file_lines('somefile'): #do some work here
output akan:
<?php function file_lines($filename) { $file = fopen($filename, 'r'); while (($line = fgets($file)) !== false) { yield $line; } fclose($file); } foreach (file_lines('somefile') as $line) { // do some work here } ?>
Simpan Memori Menggunakan Penjana
Penjana berguna apabila anda mengira koleksi besar dan tidak mahu memperuntukkan memori untuk semua hasil pada masa yang sama, atau apabila anda tidak tahu sama ada semua keputusan diperlukan. Oleh kerana hasilnya diproses, penggunaan memori dapat dikurangkan ke tahap yang sangat rendah dengan memperuntukkan memori hanya untuk hasil semasa. Bayangkan fungsi file()
, yang mengembalikan semua baris dalam fail sebagai array. Jalankan penanda aras mudah untuk fungsi file()
dan fungsi demo file_lines()
kami, masing-masing menggunakan fail teks 100 segmen rawak yang sama yang dijana menggunakan Lipsum, dan hasilnya menunjukkan bahawa fungsi file
menggunakan paling banyak penjana 110 kali
<?php function file_lines($filename) { // ... yield $key => $line; // ... } foreach (file_lines('somefile') as $key => $line) { // do some work here } ?>
Kesimpulan
Dengan pengenalan penjana, PHP menyediakan pemaju dengan alat yang berkuasa. Kita kini boleh menulis Iterator dengan cepat sambil menyimpan banyak ingatan. Melalui tutorial ini, saya harap anda mendapat pengetahuan yang cukup untuk mula menggunakannya dalam projek anda. Secara peribadi, saya telah memikirkan banyak objek untuk menulis semula. Sekiranya anda mempunyai idea atau komen, sila tinggalkan komen anda.
FAQs untuk penjana php
(Soalan Lazim yang disenaraikan dalam teks asal hendaklah disertakan di sini, dan disebabkan oleh batasan ruang, ia ditinggalkan di sini.)
Atas ialah kandungan terperinci PHP Master | Penjana dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Thesecrettokeepingaphp-poweredwebsiterunningsmoothlyunderheavyloadinVolvesserVeSkeystrategies: 1) pelaksanaanPodeCachingWithopCachetoreduceScriptexecutionTime, 2) UsedataBasequerycachingWnithSoRessendataBaBAboad, 3)

Anda harus mengambil berat tentang kebergantungan (DI) kerana ia menjadikan kod anda lebih jelas dan lebih mudah untuk dikekalkan. 1) Di menjadikannya lebih modular dengan decoupling kelas, 2) meningkatkan kemudahan ujian dan fleksibiliti kod, 3) menggunakan bekas DI untuk menguruskan kebergantungan kompleks, tetapi memberi perhatian kepada kesan prestasi dan kebergantungan bulat, 4) Amalan terbaik adalah bergantung kepada antara muka abstrak untuk mencapai gandingan longgar.

Ya, OptimizingaphpapplicationIspossibleandessential.1) pelaksanaanCachingUsingAputeDeducedeDataBaseload.2) OptimisedataTabaseseseshithindexing, eficientqueries, danConnectionPooling.3) EnhancecodeWithBuilt-Infungsi, EveringGlobalVariables

ThekeystrategiestoSignificLantantlyboostphpapplicationperformanceare: 1) useopcodecachinglikLikeopcachetoreduceExecutionTime, 2) OptimizedataBaseInteractionsWithPreparedStatementsandProperindexing, 3) ConfigureWebserverserverLikenginxWithPmforbetterShipter.

AphpdependencyInjectionContainerisatoLthatMatagesClassDependencies, EnhancingCodeModularity, Testability, andMaintainability.itactsascentralHubforcreatingandinjectingdependencies, sheReducingTightCouplingandeaseaseaseSunittesting.

Pilih DependencyInjection (DI) Untuk aplikasi besar, servicelocator sesuai untuk projek kecil atau prototaip. 1) DI meningkatkan kesesuaian dan modulariti kod melalui suntikan pembina. 2) ServiceLocator memperoleh perkhidmatan melalui pendaftaran pusat, yang mudah tetapi boleh menyebabkan peningkatan gandingan kod.

Phpapplicationscanbeoptimizedforspeedandeficiencyby: 1) enablingopcacheinphp.ini, 2) menggunakan preparedSwithpdofordatabasequeries, 3) menggantikanloopswitharray_filterandarray_mapfordataprocessing, 4) configuringnginywinginywinyvinyvinginy

PhpeMailvalidationInvolvestHreesteps: 1) formatValidationingRegularExpressionStocheckTheemailFormat; 2) dnsvalidationtoensurethedomainhasavalidmxrecord;


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Dreamweaver Mac版
Alat pembangunan web visual

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!
