国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah pembangunan bahagian belakang tutorial php PHP Master | Penjana dalam PHP

PHP Master | Penjana dalam PHP

Feb 23, 2025 am 09:12 AM

PHP Master | Generators in PHP

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()
Jika anda mengikuti artikel terdahulu saya mengenai iterators, anda akan tahu bahawa lelaran adalah konsep pengaturcaraan yang penting, tetapi melaksanakan antara muka yang diperlukan untuk membuat objek yang boleh dimakan adalah masalah yang terbaik kerana ia memerlukan banyak kod boilerplate. Dengan pembebasan PHP 5.5, kami akhirnya mempunyai penjana! Dalam artikel ini, kita akan belajar tentang penjana, yang menyediakan cara mudah untuk melaksanakan pengaliran mudah tanpa overhead atau kerumitan antara muka iterator.

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

mari kita menulis semula contoh penjana python dalam PHP. (Perhatikan bahawa kedua -dua coretan kod ini melakukan apa -apa pemeriksaan ralat.)
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!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah beberapa amalan terbaik untuk versi API berasaskan PHP? Apakah beberapa amalan terbaik untuk versi API berasaskan PHP? Jun 14, 2025 am 12:27 AM

TOVERSIONAPHP-berasaskan-berasaskan, UseUrl-berasaskan Forversioningforclarityandeaseofrouting, separateVersionedcodetoavoidconflicts, decrecateoldversionswithclearCommunication, andconsidercustomheadershipshenershipshenershipshenershipshenershinlyhenershinlywenershinly

Bagaimana saya melaksanakan pengesahan dan kebenaran dalam php? Bagaimana saya melaksanakan pengesahan dan kebenaran dalam php? Jun 20, 2025 am 01:03 AM

TosecurelyhandleAuthenticationandauthorizationInphp, ikuti: 1.alwayshashpasswordswithpassword_hash () andverifyUsingPassword_verify (), usePePreparedStatementStopreventsqlInjection, andStoreUserDatain $ _SessionAsLogin.2.implescureRoleRoleRoleRoleRole

Apakah perbezaan antara paradigma pengaturcaraan berorientasikan prosedur dan objek dalam PHP? Apakah perbezaan antara paradigma pengaturcaraan berorientasikan prosedur dan objek dalam PHP? Jun 14, 2025 am 12:25 AM

Proseduralandobject-orientedprogramming (OOP) inphpdiffers significelyinstructure, kebolehgunaan semula, dandatahandling.1.ProceduralProgrammingusesFunctionsaganediediedieds, sesuai, pemodelan

Apakah rujukan yang lemah (lemah) dalam PHP, dan kapan mereka berguna? Apakah rujukan yang lemah (lemah) dalam PHP, dan kapan mereka berguna? Jun 14, 2025 am 12:25 AM

PHPdoesnothaveabuilt-inWeakMapbutoffersWeakReferenceforsimilarfunctionality.1.WeakReferenceallowsholdingreferenceswithoutpreventinggarbagecollection.2.Itisusefulforcaching,eventlisteners,andmetadatawithoutaffectingobjectlifecycles.3.YoucansimulateaWe

Bagaimana anda boleh mengendalikan fail memuat naik dengan selamat di php? Bagaimana anda boleh mengendalikan fail memuat naik dengan selamat di php? Jun 19, 2025 am 01:05 AM

Untuk mengendalikan muat naik fail dengan selamat di PHP, terasnya adalah untuk mengesahkan jenis fail, menamakan semula fail, dan menyekat kebenaran. 1. Gunakan finfo_file () untuk memeriksa jenis mime sebenar, dan hanya jenis tertentu seperti imej/jpeg dibenarkan; 2. Gunakan uniqid () untuk menghasilkan nama fail rawak dan simpannya dalam direktori akar bukan web; 3. Hadkan saiz fail melalui borang php.ini dan html, dan tetapkan kebenaran direktori ke 0755; 4. Gunakan Clamav untuk mengimbas malware untuk meningkatkan keselamatan. Langkah -langkah ini dengan berkesan menghalang kelemahan keselamatan dan memastikan bahawa proses muat naik fail adalah selamat dan boleh dipercayai.

Bagaimanakah anda boleh berinteraksi dengan pangkalan data NoSQL (mis., MongoDB, Redis) dari PHP? Bagaimanakah anda boleh berinteraksi dengan pangkalan data NoSQL (mis., MongoDB, Redis) dari PHP? Jun 19, 2025 am 01:07 AM

Ya, PHP boleh berinteraksi dengan pangkalan data NoSQL seperti MongoDB dan Redis melalui sambungan atau perpustakaan tertentu. Pertama, gunakan pemacu MongoDBPHP (dipasang melalui PECL atau komposer) untuk membuat contoh pelanggan dan mengendalikan pangkalan data dan koleksi, penyisipan sokongan, pertanyaan, pengagregatan dan operasi lain; Kedua, gunakan perpustakaan predis atau lanjutan phpredis untuk menyambung ke REDIS, lakukan tetapan dan pengambilalihan nilai utama, dan mengesyorkan PHPREDI untuk senario berprestasi tinggi, sementara Predis mudah untuk penempatan pesat; Kedua-duanya sesuai untuk persekitaran pengeluaran dan didokumentasikan dengan baik.

Apakah perbezaan antara == (perbandingan longgar) dan === (perbandingan ketat) dalam php? Apakah perbezaan antara == (perbandingan longgar) dan === (perbandingan ketat) dalam php? Jun 19, 2025 am 01:07 AM

Dalam PHP, perbezaan utama antara == dan == adalah ketat pemeriksaan jenis. == Penukaran jenis akan dilakukan sebelum perbandingan, contohnya, 5 == "5" pulangan benar, dan === meminta nilai dan jenis adalah sama sebelum benar akan dikembalikan, sebagai contoh, 5 === "5" mengembalikan palsu. Dalam senario penggunaan, === lebih selamat dan harus digunakan terlebih dahulu, dan == hanya digunakan apabila penukaran jenis diperlukan.

Bagaimanakah saya melakukan operasi aritmetik dalam php (, -, *, /, %)? Bagaimanakah saya melakukan operasi aritmetik dalam php (, -, *, /, %)? Jun 19, 2025 pm 05:13 PM

Kaedah menggunakan operasi matematik asas dalam PHP adalah seperti berikut: 1. Tanda tambahan menyokong bilangan bulat dan nombor terapung, dan juga boleh digunakan untuk pembolehubah. Nombor rentetan akan ditukar secara automatik tetapi tidak disyorkan kepada kebergantungan; 2. Tanda -tanda pengurangan - tanda, pembolehubah adalah sama, dan penukaran jenis juga terpakai; 3. Tanda -tanda pendaraban menggunakan tanda *, yang sesuai untuk nombor dan rentetan yang serupa; 4. Bahagian menggunakan / tanda, yang perlu mengelakkan pembahagian dengan sifar, dan perhatikan bahawa hasilnya mungkin nombor terapung; 5. Mengambil tanda modulus boleh digunakan untuk menilai angka ganjil dan bahkan, dan apabila memproses nombor negatif, tanda -tanda selebihnya selaras dengan dividen. Kunci untuk menggunakan pengendali ini dengan betul adalah untuk memastikan bahawa jenis data adalah jelas dan keadaan sempadan ditangani dengan baik.

See all articles