PHP Conference Japan 2024

register_tick_function

(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)

register_tick_function注册一个在每次 tick 时执行的函数

描述

register_tick_function(callable $callback, mixed ...$args): bool

注册给定的 callback,以便在调用 tick 时执行。

参数

callback

要注册的函数。

args

返回值

成功时返回 true,失败时返回 false

示例

示例 #1 register_tick_function() 示例

<?php
declare(ticks=1);

// 使用函数作为回调
register_tick_function('my_function', true);

// 使用对象->方法
$object = new my_class();
register_tick_function(array($object, 'my_method'), true);
?>

参见

添加注释

用户贡献的注释 2 条注释

Carlos Granados
7 年前
一个使用可变输入的有效示例,用于验证算法的渐近分析

<?php

$n
= 1000; // 输入的大小

declare(ticks=1);

class
Counter {
private
$counter = 0;

public function
increase()
{
$this->counter++;
}

public function print()
{
return
$this->counter;
}
}

$obj = new Counter;

register_tick_function([&$obj, 'increase'], true);

for (
$i = 0; $i < 100; $i++)
{
$a = 3;
}

// unregister_tick_function([&$obj, 'increase']);
// 不确定如何取消注册,可以使用 Counter 中的静态方法和成员。

var_dump("基本低级操作的数量: " . $obj->print());

?>
Peter Featherstone
7 年前
由于实现错误,在 PHP 7.0 之前,declare(ticks=1) 指令泄漏到不同的编译单元中。这不是 declare() 指令(每个文件或每个作用域)的预期工作方式。

因此,PHP 5.6 和正确的实现之间存在不同的实现,正确的实现已在 PHP 7.0 中添加。这意味着下面的脚本将返回不同的结果

#index.php

<?php

declare(ticks=1);
$count = 0;

register_tick_function('ticker');
function
ticker() {
global
$count;
$count++;
}

?>

#inc.php

<?php

$baz
= "baz";
$qux = "qux";

?>

在终端中运行 php index.php 给出

PHP 5.6 - 7
PHP 7.0 - 5
To Top