unregister_tick_function
(PHP 4 >= 4.0.3, PHP 5)
unregister_tick_function — De-register a function for execution on each tick
Description
void unregister_tick_function
( string
$function_name
)
De-registers the function named by function_name
so it is
no longer executed when a tick is
called.
Parameters
-
function_name
-
The function name, as a string.
Return Values
No value is returned.
Коментарии
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.
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.
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);
}