PHP 7 新增的生成器特性
来源:互联网 发布:java calendar.gettime 编辑:程序博客网 时间:2024/06/13 11:38
本文和大家分享的主要是PHP 7 新增的生成器委托、生成器返回表达式等相关内容,一起来看看吧,希望对待学习php7有所帮助。
生成器委托(Generator Delegation)
生成器委托(Generator Delegation)是 PHP 7 添加的特性,官方文档描述是:
“In PHP 7, generator delegation allows you to yield values from another generator, Traversable object, or array by using the yield from keyword. The outer generator will then yield all values from the inner generator, object, or array until that is no longer valid, after which execution will continue in the outer generator.”。
生成器委托的形式为: yield 。 的结果得是可遍历对象或数组。
<?phpdeclare(strict_types=1);
$seh_seh_liām = function () {
$generator = function () {
yield from range(1, 3);
foreach (range(4, 6) as $i) {
yield $i;
}
};
foreach ($generator() as $value) {
echo "每天念 PHP 是最好的编程语言 6 遍...第 $value 遍...", PHP_EOL;
}
};
$seh_seh_liām();
生成器返回表达式(Generator Return Expression)
生成器返回表达式(Generator Return Expression)为生成器函数提供了增强内力,在 PHP 7 之前是无法在生成器函数内返回值的。
举例如下:
<?php
$traverser = (function () {
yield "foo";
yield "bar";
return "value";
})();
$traverser->getReturn(); // Exception with message 'Cannot get return value of a generator that hasn't returned'
foreach ($traverser as $value) {
echo "{$value}", PHP_EOL;
}
$traverser->getReturn(); // "value"
生成器与Coroutine
来个直接点的例子。
<?phpdeclare(strict_types=1);
class Coroutine{
public static function create(callable $callback) : Generator
{
return (function () use ($callback) {
try {
yield $callback;
} catch (Exception $e) {
echo "OH.. an error, but don't care and continue...", PHP_EOL;
}
})();
}
public static function run(array $cos)
{
$cnt = count($cos);
while ($cnt > 0) {
$loc = random_int(0, $cnt-1); // 用 random 模拟调度策略。
$cos[$loc]->current()();
array_splice($cos, $loc, 1);
$cnt--;
}
}
}
$co = new Coroutine();
$cos = [];for ($i = 1; $i <= 10; $i++) {
$cos[] = $co::create(function () use ($i) { echo "Co.{$i}.", PHP_EOL; });
}
$co::run($cos);
$cos = [];for ($i = 1; $i <= 20; $i++) {
$cos[] = $co::create(function () use ($i) { echo "Co.{$i}.", PHP_EOL; });
}
$co::run($cos);
来源:2gua
阅读全文
0 0
- PHP 7 新增的生成器特性
- php5.5新增特性yield生成器
- HTML5新增的特性
- PHP 6新增多项特性及改进
- PHP 6新增多项特性及改进
- PHP的生成器
- SMS 2.0的新增特性
- C# 4.0 的新增特性
- ES6的新增特性1
- 【生成器】PHP的生成器yield【原创】
- 基于PHP的颜色生成器
- PHP简单的生成器使用
- PHP新特性之命名空间、性状和生成器
- 802.11n 的新增的特性
- 与时俱进,水晶报表 10 的新增特性
- 与时俱进,水晶报表 10 的新增特性
- JAVA 5的新增语言特性
- 体验Java 5.0的新增语言特性
- Python 常用数据类型学习-总结1
- 《剑指offer》像素翻转
- C语言文件操作总结
- LeetCode 85. Maximal Rectangle
- 初学电子 ADC模块应用的一些问题
- PHP 7 新增的生成器特性
- Java异步编程
- 推荐算法原理感悟
- 数据结构导论——第一遍导图
- JS-13-jquery
- 服务器搭建
- python模块和包
- linux c语言获得时间和打印时间
- C++创建一个类(1.只能在堆上创建; 2 只能在栈上创建; 3 不能被继承(堆上和栈上都可以创建))