1 Star 0 Fork 0

behmenwf/blog

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Hook.php 3.17 KB
一键复制 编辑 原始数据 按行查看 历史
behmenwf 提交于 2016-08-25 15:28 +08:00 . 2016年8月25日15:27:54
<?php namespace Hdphp\Hook;
class Hook
{
//钓子
private static $hook = array();
/**
* 添加钓子事件
*
* @param $hook 钓子名称
* @param $action 钓子事件
*/
public static function add($hook, $action)
{
if ( ! isset(self::$hook[$hook]))
{
self::$hook[$hook] = array();
}
if (is_array($action))
{
self::$hook[$hook] = array_merge(self::$hook[$hook], $action);
}
else
{
self::$hook[$hook][] = $action;
}
}
/**
* 获得钓子信息
*
* @param string $hook 钓子名
*
* @return array
*/
public static function get($hook = '')
{
if (empty($hook))
{
return self::$hook;
}
else
{
return self::$hook[$hook];
}
}
/**
* 批量导入钓子
*
* @param $data 钓子数据
* @param bool $recursive 是否递归合并
*/
public static function import($data, $recursive = true)
{
if ($recursive === false)
{
self::$hook = array_merge(self::$hook, $data);
}
else
{
foreach ($data as $hook => $value)
{
if ( ! isset(self::$hook[$hook]))
{
self::$hook[$hook] = array();
}
if (isset($value['_overflow']))
{
unset($value['_overflow']);
self::$hook[$hook] = $value;
}
else
{
self::$hook[$hook] = array_merge(self::$hook[$hook], $value);
}
}
}
}
/**
* 监听钓子
*
* @param $hook 钓子名
* @param null $param 参数
*
* @return bool
*/
public static function listen($hook, &$param = null)
{
if ( ! isset(self::$hook[$hook]))
{
return false;
}
foreach (self::$hook[$hook] as $name)
{
if (false ===self::exe($name, $hook, $param))
{
return false;
}
}
return $param?:true;
}
/**
* 执行钓子
*
* @param $name 钓子名
* @param $action 钓子方法
* @param null $param 参数
*
* @return boolean
*/
public static function exe($name, $action = 'run', &$param = null)
{
if (substr($name, -4) == 'Hook')
{
//钓子
$action = 'run';
}
else
{
//插件
$file = 'Addons/' . $name . '/' . $name . 'Addon.php';
if ( ! is_file($file))
{
return false;
}
require_once($file);
$name = "\\Addons\\{$name}\\" . $name . 'Addon';
if ( ! class_exists($name, false))
{
return false;
}
}
$obj = new $name;
if (method_exists($obj, $action))
{
$obj->$action($param);
}
return $param;
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/behmen/blog.git
git@gitee.com:behmen/blog.git
behmen
blog
blog
681332d3e7972e9a8d03d5da88e342962b2ef4ed

搜索帮助