unregister_tick_function()
(PHP 4 >= 4.0.3, PHP 5, PHP 7)
De-register a function for execution on each tick
说明
unregister_tick_function(string $function_name): void
De-registers the function named by$function_nameso it is no longer executed when atickis called.
参数
- $function_name
The function name, as a string.
返回值
没有返回值。
参见
register_tick_function()
Register a function for execution on each tick
You can unregister closure-function: declare(ticks = 1000); $startTime = microtime(true); $tick = true; $closure = function () use ($startTime, &$tick) { if (((microtime(true) - $startTime) > 5) && $tick) { $tick = false; throw new \Exception('Time to run code left'); } }; try { register_tick_function($closure); //do your code $result = 1; return $result; } catch (\Exception $e) { throw $e; } finally { unregister_tick_function($closure); }
It's not so clear, but, at least as of PHP 5.3.13, you cannot use this inside of the handler itself as it will throw an error: <?php declare(ticks=2); function tick_handler() { unregister_tick_function('tick_handler'); } register_tick_function('tick_handler'); set_time_limit(0); usleep(500000); ?> results in: warning: unregister_tick_function(): Unable to delete tick function executed at the moment in [filename] So if you want to unregister it must be done outside of the handler.
Note that unregister_tick_function() can also accept a callback in the form of an array (either static, like array($className, $methodName) or instance, like array(&$this, $methodName)). It cannot accept an anonymous function, however.