专业编程基础技术教程

网站首页 > 基础教程 正文

php也有协程? php协议

ccvgpt 2024-10-12 14:18:02 基础教程 6 ℃

用python开发知道协程的存在,今天在看一个php框架的时候 发现他们居然使用的协程。

然后查看了资料。

php也有协程? php协议

发现php5.5就开始支持了。

PHP5.5:yield, list() 用于 foreach, 细节修改
yield 在python上就像个神器一样的存在,能大大的节约内存的开销。

看看它在php上是怎么使用的吧!

一个生成器函数看起来像一个普通的函数,不同的是普通函数返回一个值,而一个生成可以yield生成许多它所需要的值,并且每一次的生成返回值只是暂停当前的执行状态,当下次调用生成器函数时,PHP会从上次暂停的状态继续执行下去。

我们在使用生成器的时候可以像关联数组那样指定一个键名对应生成的值。如下生成一个键值对与定义一个关联数组相似。

function xrange($start, $limit, $step = 1) { 
 for ($i = $start, $j = 0; $i <= $limit; $i += $step, $j++) { // 给予键值
 yield $j => $i;
 }
}$xrange = xrange(1, 10, 2);foreach ($xrange as $key => $value) { echo $key . ' => ' . $value . "\n";

上面这个xrange()函数提供了和PHP的内建函数range()一样的功能.但是不同的是range()函数返回的是一个包含值从1到100万0的数组(注:请查看手册). 而xrange()函数返回的是依次输出这些值的一个迭代器, 而不会真正以数组形式返回.

这种方法的优点是显而易见的.它可以让你在处理大数据集合的时候不用一次性的加载到内存中.甚至你可以处理无限大的数据流.

发现也python的用法差不多。python的协程实现方式之一的yield,在php是不是也能实现呢?
具体实现方法 可以看看 鸟哥的《在PHP中使用协程实现多任务调度》

Tags:

最近发表
标签列表