AsyncHook   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
dl 0
loc 39
rs 10
c 1
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A hook() 0 6 2
A __run() 0 9 3
1
<?php
2
namespace tinymeng\tools\async;
3
4
class AsyncHook{
5
6
    /**
7
     * @var array
8
     */
9
    private static $hook_list = array();
10
    /**
11
     * @var bool
12
     */
13
    private static $hooked = false;
14
15
16
    /**
17
     * hook函数 fastcgi_finish_request执行
18
     * @param callback $callback
19
     * @param array $params
20
     */
21
    public static function hook(callable $callback, $params) {
22
        self::$hook_list[] = array('callback' => $callback, 'params' => $params);
23
        if(self::$hooked === false) {
24
            self::$hooked = true;
25
            //注册一个callback当前在脚本执行完后执行
26
            register_shutdown_function(array(__CLASS__, '__run'));
27
        }
28
    }
29
30
    /**
31
     * 由系统调用
32
     * @return void
33
     */
34
    private static function __run() {
35
        fastcgi_finish_request();
36
        if(empty(self::$hook_list)) {
37
            return;
38
        }
39
        foreach(self::$hook_list as $hook) {
40
            $callback = $hook['callback'];
41
            $params = $hook['params'];
42
            call_user_func_array($callback, $params);
43
        }
44
    }
45
46
}