dangoodman / deferred
基于RAII的延迟回调执行
1.0.1
2017-04-26 11:54 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: ~3.7
This package is auto-updated.
Last update: 2024-09-17 03:45:18 UTC
README
Deferred
基于RAII的Deferred回调执行。
使用示例
function download($url, $toFile) { // Temporary increase memory limit for this function // $restoreMemoryLimit automatically called upon function exit $prevMemoryLimit = ini_get('memory_limit'); ini_set('memory_limit', '256M'); $restoreMemoryLimit = new Deferred(function() use($prevMemoryLimit) { ini_set('memory_limit', $prevMemoryLimit); }); $contents = file_get_contents($url); if (!$contents) { throw new \RuntimeException("Couldn't fetch url contents"); } if (file_put_contents($toFile, $contents) === false) { throw new \RuntimeException("Couldn't save url contents to file '{$toFile}'"); } return $contents; }
与以下无deferred的示例进行比较
function downloadWithouDeferred($url, $toFile) { $prevMemoryLimit = ini_get('memory_limit'); ini_set('memory_limit', '256M'); $contents = file_get_contents($url); if (!$contents) { ini_set('memory_limit', $prevMemoryLimit); throw new \RuntimeException("Couldn't fetch url contents"); } if (file_put_contents($toFile, $contents) === false) { ini_set('memory_limit', $prevMemoryLimit); throw new \RuntimeException("Couldn't save url contents to file '{$toFile}'"); } ini_set('memory_limit', $prevMemoryLimit); return $contents; }