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.
