Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP挂起的生成器函数是否需要花费资源?_Php_Generator - Fatal编程技术网

PHP挂起的生成器函数是否需要花费资源?

PHP挂起的生成器函数是否需要花费资源?,php,generator,Php,Generator,我写了一个这样的缓存持有者: <?php function expensive() { sleep(3);

我写了一个这样的缓存持有者:

<?php                                                                            

function expensive() {                                                           
  sleep(3);                                                                      
  yield "expensive result";                                                      
}                                                                                


$container = [];                                                                 
function cache_holder($key, $data) {                                             
  global $container;
  if (!isset($container[$key])) {                                                
    $container[$key] = $data->current();
  }                                                                              
  return $container[$key];
}

// run

$start = microtime(true);                                                        

$first_fetch = cache_holder('foo', expensive());
echo $first_fetch, "\n";                       
$end_first = microtime(true);
printf("elapsed time: %.2f ms \n", ($end_first - $start) * 1000);

$second_fetch = cache_holder('foo', expensive());
echo $second_fetch, "\n";                               
$end_second = microtime(true);
printf("elapsed time: %.2f ms \n", ($end_second - $end_first) * 1000);

它们应该占用它们所持有的所有变量的内存,但实际上除此之外没有其他开销。我不知道它们是如何实现的,但这似乎是一个常识案例。