PHP generator syntax details analysis
A generator function looks like a normal function, the difference is that the generator will produce multiple values on demand instead of returning a single value.
When the generator function is called, it will return an iterable object When you iterate over that object (for example, through a foreach loop), PHP will call the generator function each time a value is needed, and then when the generator produces a value, it will save the generator's state for the next time. A value can be restored when needed.
If no more values are produced, the generator function can simply exit, and the calling code will continue as if an array has used up all values.
Note:
Generators cannot return values : Doing so will cause a compilation error. An empty return statement within a generator is valid syntax and will break that generator.
yield Keyword
At the heart of generator functions is the yield keyword. In its simplest form, A yield statement looks very much like a return statement, except that instead of returning a value and then stopping execution, yield provides a value to the code that looks at the generator and then pauses the execution of the generator.
Example #1 Yielding a value Simple example
<?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"; } ?>
The above routine will output:
1 2 3
Note:
Internally, the serialized integer key will be paired with the output value, just like a non-associative array.
Caution If you use context expressions When using yield (for example, in an assignment statement to the right of the equal sign), be sure to use parentheses. For example, the following code is correct:
$data = (yield $value);
But the following code will A parsing error occurred:
$data = yield $value;
This syntax may be used with the send() method in the generator object.
Use key to get the value
PHP supports associative arrays, and the same goes for generators. In addition to generating simple values, as shown above, you can also generate keys at the same time.
The syntax for generating key/value pairs is very simple and can be used to define associative arrays, as shown below.
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 = <<<'EOF' 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(';', $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"; } ?>
The above routine will output:
1: PHP Likes dollar signs 2: Python Likes whitespace 3: Ruby Likes blocks
Caution is the same as the earlier generation of simple values. Generating key/value pairs in a context expression requires the yield statement to be enclosed in parentheses:
$data = (yield $key => $value);
Produces null value
Yield can be called without arguments to generate NULL values using automatically generated keys.
Example #3 Yielding NULLs
<?php function gen_three_nulls() { foreach (range(1, 3) as $i) { yield; } } var_dump(iterator_to_array(gen_three_nulls())); ?>
The above routine will output:
array(3) { [0]=>NULL [1]=>NULL [2]=>NULL }
Producing values by reference
Generator functions can generate values by reference. This is the same as returning references from functions: by adding & in front of the function name.
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).'... '; } ?>
The above routine will output:
2... 1... 0...

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
