echo "Current Memory: " . convert(memory_get_usage(true)), "
function convert($size) {
$unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i];
}
function yield() {
//echo 'Memory before processing the data: ', memory_get_usage(),' in ',FUNCTION, ':
';
$args = func_get_args();
//do something with data
//echo '
';
//var_dump($args);
// echo '
';
// echo 'Memory after processing the data: ', memory_get_usage(),' in ',FUNCTION, ':
';
unset($args);
return;
}
function process(array $someData = array()) {
// do some computations that generates $data
foreach ($someData as $data) {
// echo 'Memory before yielding: ', memory_get_usage(),' in ',FUNCTION, ':
';
call_user_func('yield', $data);
// echo 'Memory after yielding: ', memory_get_usage(),' in ',FUNCTION, ':
';
}
}
function process_53(array $someData = array()) {
// do some computations that generates $data
foreach ($someData as $data) {
// echo 'Memory before yielding: ', memory_get_usage(),' in ',FUNCTION, ':
';
call_user_func(function() {
//echo 'Memory before processing the data: ', memory_get_usage(),' in ',FUNCTION, ':
';
$args = func_get_args();
//do something with data
//echo '
';
//var_dump($args);
// echo '
';
// echo 'Memory after processing the data: ', memory_get_usage(),' in ',FUNCTION, ':
';
unset($args);
return;
}, $data);
// echo 'Memory after yielding: ', memory_get_usage(),' in ',FUNCTION, ':
';
}
}
echo '
Let\'s do something fun
';
echo '
Starting memory: ', convert(memory_get_usage(true)), '
';
$longString = str_repeat(md5('php yield'), 2000); //heavy operation
$someData = array_fill(5, 60000, $longString); // this alone will raise your memory usage to the moon
echo '
Memory after getting the data: ', convert(memory_get_usage(true)), '
';
process_53($someData);
unset($someData);
echo '
End memory: ', convert(memory_get_usage(true)), '
';
[/code]