Rumah pembangunan bahagian belakang tutorial php php生成器语法详情解析

php生成器语法详情解析

Nov 23, 2016 am 09:10 AM
php penjana php

一个生成器函数看上去和普通函数一样, 不同之处在于生成器会按需产出多个值而不是返回一个值.

当生成器函数被调用的时候,会返回一个可以迭代的对象. 当你迭代那个对象的时候 (例如, 通过foreach循环), 每当需要一个值的时候,PHP都会调用生成器函数, 然后当生成器产出一个值的时候会保存生成器的状态,以便下一个值需要的时候可以恢复.

如果没有更多值产出, 生成器函数可以简单退出, 调用代码会继续就好像一个数组用完所有值一样.

Note:

生成器不能返回值: 这样做会导致编译错误. 在生成器中空的返回语句是有效的语法并且会中断该生成器.

yield 关键字

生成器函数的核心就是 yield 关键字. 在最简单的形式中, 一个 yield 语句看上去非常像一个return语句, 不同之处在于yield提供一个值给查看生成器的代码然后暂停生成器的执行,而不是返回一个值之后停止执行.

Example #1 产出值的简单示例

<?php
    function gen_one_to_three() {
        for ($i = 1; $i <= 3; $i++) {
            // Note that $i is preserved between yields.
            yield $i;
        }
    }
    $generator = gen_one_to_three();
    foreach ($generator as $value) {
         echo "$value\n";
    }
?>
Salin selepas log masuk

以上例程会输出:

1
2
3
Salin selepas log masuk

Note:

在内部, 序列化的整型键将会个产出值配对, 正如非关联数组一样.

Caution如果你在上下文表达式中使用 yield (例如, 在等号右边的赋值语句中), 一定要使用括号括起来.例如, 下面的代码是正确的:

$data = (yield $value);

但是下面的代码会出现解析错误:

$data = yield $value;

在生成器对象中这个语法可能会和send() 方法一起使用.

使用key获取值

PHP支持关联数组, 生成器也一样. 除了生成简单的值, 正如上面所示,你还可以同时生成键.

生成 key/value 对的语法非常简单,可以用来定义关联数组, 如下所示.

Example #2 Yielding a key/value pair

<?php
    /* The input is semi-colon separated fields, with the first
     * field being an ID to use as a key. */
    $input = <<<&#39;EOF&#39;
1;PHP;Likes dollar signs
2;Python;Likes whitespace
3;Ruby;Likes blocks
EOF;
    function input_parser($input) {
        foreach (explode("\n", $input) as $line) {
            $fields = explode(&#39;;&#39;, $line);
            $id = array_shift($fields);
            yield $id => $fields;
        }
    }
    foreach (input_parser($input) as $id => $fields) {
        echo "$id:\n";
        echo " $fields[0]\n";
        echo " $fields[1]\n";
    }
?>
Salin selepas log masuk

以上例程会输出:

1:
    PHP
    Likes dollar signs
2:
    Python
    Likes whitespace
3:
    Ruby
    Likes blocks
Salin selepas log masuk

Caution和早期的生成简单值一样, 在一个上下文表达式中生成 key/value 对需要 yield 语句被括号括起来:

$data = (yield $key => $value);
Salin selepas log masuk

生成null值

Yield 可以进行无参数调用来使用自动产生的键生成NULL值.

Example #3 Yielding NULLs

<?php
    function gen_three_nulls() {
        foreach (range(1, 3) as $i) {
            yield;
        }
    }
    var_dump(iterator_to_array(gen_three_nulls()));
?>
Salin selepas log masuk

以上例程会输出:

array(3) {
    [0]=>NULL
    [1]=>NULL
    [2]=>NULL
}
Salin selepas log masuk

通过引用产生值

生成器函数可以通过引用产生值. 这和returning references from functions中的做法一样: 通过在函数名前加&来实现.

Example #4 Yielding values by reference

<?php
    function &gen_reference() {
        $value = 3;
        while ($value > 0) {
            yield $value;
        }
    }
    /* 注意我们可以在循环中改变$number
     * because the generator is yielding references, $value
     * within gen_reference() changes. */
    foreach (gen_reference() as &$number) {
        echo (--$number).&#39;... &#39;;
    }
?>
Salin selepas log masuk

以上例程会输出:

2... 1... 0...
Salin selepas log masuk


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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

See all articles