unregister_tick_function
(PHP 4 >= 4.0.3, PHP 5)
unregister_tick_function — Удаляет функцию из списка зарегистрированных для выполнения при каждом тике
Описание
void unregister_tick_function
( string $function_name
)
Удаляет function_name из списка функций, зарегистрированных для выполнения при каждом тике (см. tick).
См. также declare() и register_tick_function().
Коментарии
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);
}