• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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.

    返回值

    没有返回值。

    参见

    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.