Example #1
0
/**
 * 提供hook_invoke钩子
 * ModuleName_HOOK_invoke
 * @return array
 */
function invoke($hook)
{
    static $hooks = array();
    if (!isset($hooks[$hook])) {
        $hooks[$hook] = array();
        $modules = GearmanKernel::getModules();
        foreach ($modules as $module => $namespace) {
            if (function_exists($namespace . '\\' . $module . '_' . $hook . '_invoke')) {
                $hooks[$hook][] = $namespace . '\\' . $module . '_' . $hook . '_invoke';
            }
            if (function_exists($module . '_' . $hook . '_invoke')) {
                $hooks[$hook][] = $module . '_' . $hook . '_invoke';
            }
        }
    }
    $args = func_get_args();
    unset($args[0]);
    $return = array();
    foreach ($hooks[$hook] as $function) {
        $result = call_user_func_array($function, $args);
        if (isset($result) && is_array($result)) {
            $return = array_merge_recursive($return, $result);
        } elseif (isset($result)) {
            $return[] = $result;
        }
    }
    return $return;
}