PHP生成器-动态生成内容的数组-php教程

资源魔 17 0
界说:

1.天生器:“静态天生内容的数组”,用到值的时分才去消费。

2.搭配应用:要害字 yield foreach

保举:《php培训》

进程:

1.作为天生器的办法相称于界说了一个数组;

2.天生器中的 yield,每一次呈现相称于界说了一个数组中呈现的值;

3.foreach 会遍历天生器中一切的 yield 界说的值(某个被界说的值(表白式),只有正在被用到的时分,以后yield同上一个yield之间的其余表白式才会被执行,以后yield之后的表白式没有会被执行);

4.foreach 失常完结的话(没有是break),判别一下天生器中最初一个yield之后能否有其余表白式未执行完,是的话,执行之;

5.没有同于线程,没有是并行执行,只是正在主营业逻辑以及天生器之间来回切换执行,只节流了空间,工夫没省上去。

c7be8cb393ea15f2cb0b0d202cb6670.png

想象应用场景:

一、取年夜数据文件,天生器中逐行读取;

二、???

例子:

gen.php

 <?php
   function gen()
   {
       echo '天生器开端执行' . PHP_EOL;
      for ($i = 0; $i < 5; $i++) {
           echo '孕育发生数据以前:' . $i  . PHP_EOL;
           yield $i; 
           echo '孕育发生数据之后:' . $i  . PHP_EOL;
       }   
      echo '再来一个数据' . PHP_EOL;
      yield 5;
      echo '天生器执行完结' . PHP_EOL;
  }   
  $gen_func = gen();
  echo '天生器开端执行了吗?' . PHP_EOL;
  foreach ($gen_func as $key  => $val) {
      echo '应用数据前' . PHP_EOL;
      echo '应用数据:' . $val . PHP_EOL;
      echo '应用数据后' . PHP_EOL;
      //if ($key >= 4) {
          //break;
      //} 
  }

执行后果:

php gen.php
天生器开端执行了吗?
天生器开端执行
孕育发生数据以前:0
应用数据前
应用数据:0
应用数据后
孕育发生数据之后:0
孕育发生数据以前:1
应用数据前
应用数据:1
应用数据后
孕育发生数据之后:1
孕育发生数据以前:2
应用数据前
应用数据:2
应用数据后
孕育发生数据之后:2
孕育发生数据以前:3
应用数据前
应用数据:3
应用数据后
孕育发生数据之后:3
孕育发生数据以前:4
应用数据前
应用数据:4
应用数据后
孕育发生数据之后:4
再来一个数据
应用数据前
应用数据:5
应用数据后
天生器执行完结

局部执行进程解读:

一、14行并无挪用天生器gen(),只是做了界说;

二、进入 foreach 轮回后,开端挪用gen();

三、$val 需求值的时分,记住以后地位a,执行天生器;

四、执行到 yield 界说之处,取到值了,记住以后地位b,前往地位a;

五、轮回三、4两步;

六、轮回完结,执行完 yield 最初一次界说之处的之后的剩下局部;

七、去掉20、2一、22行的正文后执行,"应用数据:4 应用数据后",就再也不有其余输入。

其余(仅验证了PHP7.1.14版本)

一、value);//YES value;//NO

二、能够应用yield val;

三、PHP7之后,yield from 能够挪用天生器、数组、应用return等。

更多编程相干内容,请存眷资源魔编程教程栏目!

以上就是PHP天生器-静态天生内容的数组的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 PHP生成器

抱歉,评论功能暂时关闭!