Trong các phiên bản PHP trước, hàm generator không trả về biểu thức, nhưng từ PHP 5.5, generator return expression được thêm vào. Dùng generator return expressions, dễ dàng dùng return trong generator và trả về giá trị biểu thức cuối.
- Chỉ trả về giá trị biểu thức, không trả về tham chiếu. Dùng phương thức mới Generator::getReturn() lấy giá trị sau khi generator kết thúc yield các giá trị định nghĩa.
- Dùng PHP 7 generator, có thể trả giá trị cuối từ generator return expressions. Lấy biểu thức trả về bằng $generator->getReturn() vì PHP 7 cho phép giá trị cuối được trả về bởi generator từ coroutine counting trong chương trình client code thực thi generator.
Ví dụ Generator Return Expressions 1
<html> <head> <title> PHP 7 Feature : Generator Return Expressions </title> </head> <body> <?php
$generator = (function() {
yield "five";
yield "six";
yield "seven";
return "eight";
})();
foreach ($generator as $val) {
echo $val, PHP_EOL;
}
echo $generator->getReturn(), PHP_EOL;
?> </body> </html>
Kết quả
five six seven eight
Giải thích cho chương trình PHP 7 trên
- Viết code trong editor với HTML như ví dụ, phần body chèn code PHP 7 generator return expression.
- Khai báo hàm tham chiếu $generator.
- Trong $generator: yield "five", "six", "seven", "eight".
- Cuối cùng lặp qua "$generator" đến cuối (PHP_EOL) in giá trị yield cùng generator return expression.
Ví dụ Generator Return Expressions 2
<html> <head> <title> PHP 7 Feature: Generator Return Expressions Example </title> </head> <body> <?php
function gen() {
yield 'A';
yield 'B';
yield 'C';
return 'gen-return';
}
$generator = gen();
var_dump($generator);
foreach ($generator as $letter) {
echo $letter;
}
var_dump($generator->getReturn());
?> </body> </html>
Kết quả
object(Generator)#1 (0) { } ABC string(10) "gen-return"