在以前的PHP版本中,生成器函数无法返回表达式,但是从PHP 5.5开始,生成器返回表达式已添加到现有表达式中。通过使用生成器返回表达式,可以轻松在生成器中使用return语句,并且还返回最终表达式的值。
通过使用生成器返回表达式,我们只能返回表达式的值,而不能返回引用。通过使用新的Generator ::getReturn()方法,我们可以获取生成器函数完成产生定义的值后即可使用的值。
使用PHP 7生成器,我们可以从生成器的返回表达式中返回最终值。我们可以使用$generator>getReturn()来获取返回表达式,因为PHP 7允许生成器从程序中的协同例程计数返回最终值,该计数可以由执行生成器的客户端代码保存。
<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>输出结果上述PHP程序的输出为:
five six seven eight
我们可以在编辑器中编写以上代码,并可以编写如上例中给出的所需HTML代码,并且HTML主体部分将实际的PHP 7代码注入生成器返回表达式。
其次,声明一个引用为$generator的函数。
关于$generator,我们将收益定义为“五”,“六”,“七”和“八”。
最后,我们迭代“ $generator”函数直到最后(PHP_EOL),然后回显yield的值以及生成器的返回表达式。
<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>输出结果上面的PHP程序的输出将是-
object(Generator)#1 (0) { }ABCstring(10) "gen-return"