作者:与人无缘- | 来源:互联网 | 2020-08-29 19:11
yield生成器是php5.5之后出现的,官方文档这样解释:yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。
我这里只是构建了一个数组来给大家演示,平常你在操作数据库输出数据也是一样的。转为array
//仓库库存扣除测试
public function cangku_stock()
{
//set_time_limit(0); //表示永久运行,这里我是测试array的时候用到的
$order_info = $this->read_temp_api_order_info(10); //这里我就测试了10条数据,效果是看不出来的
foreach($order_info as $temp_api_order_info){
dd($temp_api_order_info); //打印出来看看数据
//处理数据
$api_ware_id = $this->o->getCangkuApiUrl() .'ware/program/addOutWare';
$out_wares = api_request($api_ware_id, $temp_api_order_info);
$temp_out_wares = json_decode($out_wares, true);
if ($temp_out_wares['code'] != 1) {
$msg = (isset($temp_out_wares['msg']) && $temp_out_wares['msg']) ? $temp_out_wares['msg'] : var_export($out_wares, true);
throw new Exception($msg);
}
}
//dd("批量更新成功".date('Y-m-d H:i:s'));
可以看到我们调用 $order_info = $this->read_temp_api_order_info(10);返回了一个 Generator 对象,这个对象可以使用 foreach 迭代,每次迭代,PHP 会要求 Generator 实例计算并提供下一个要迭代的值。
生成器的优雅体现在每次产出一个值之后,生成器的内部状态都会停顿;向生成器请求下一个值时,内部状态又会恢复。生成器内部的状态会一直在停顿和恢复之间切换,直到抵达函数定义体的末尾或遇到空的 return 语句为止。
效果如下:
这里我主要给大家讲解yield的用法,如果要看插入数据表用了多长时间,自己可以在数据表增加插入时间的字段,再看看第一条数据插入与最后一条数据插入的时候的对比的。
更多相关php知识,请访问php教程!
以上就是PHP生成器yield处理大量数据业务(代码示例)的详细内容,更多请关注 第一PHP社区 其它相关文章!