php 添加钩子实例

<?php
/*定义钩子函数*/
function add($hook,$actionFunc)
{
    global $emHooks;
    if(isset($emHooks[$hook]))
    {
        if(!in_array($actionFunc, $emHooks[$hook]))
        {
            $emHooks[$hook][] = $actionFunc;
        }
    }
    else
    {
        $emHooks[$hook][] = $actionFunc;
    }
    return true;
}

/*执行挂载钩子上的函数*/
function doo($hook)
{
    global $emHooks;
    $args = array_slice(func_get_args(),1);
    if(isset($emHooks[$hook]))
    {
        foreach ($emHooks[$hook] as $fun)
        {
            # code...
            $string  =  call_user_func_array($fun, $args);
        }
    }
    else
    {
        echo "not hook:".$hook;
    }
}
/*业务函数*/
function cnt()
{
    
    echo "dddd<br>";
}

/*业务函数*/
function say()
{
    echo "this is a hook";
}
//注册钩子
 add("index","cnt");
 add("index","say");
//在改调用的地方 调用钩子
doo("index");

时间: 2024-08-27 23:36:34

php 添加钩子实例的相关文章

HOOK API (一)——HOOK基础+一个鼠标钩子实例

HOOK API (一)——HOOK基础+一个鼠标钩子实例 0x00 起因 最近在做毕业设计,有一个功能是需要实现对剪切板的监控和进程的防终止保护.原本想从内核层实现,但没有头绪.最后决定从调用层入手,即采用HOOK API的技术来挂钩相应的API,从而实现预期的功能.在这样的需求下,就开始学习了HOOK API. 0x01什么是HOOK API HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24].HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的

MySQL系列之D-2------MySQL多实例添加一个实例

D-2.1   添加一个实例(3309实例) D-2.1.1.创建目录 # cd /data # mkdir 3309/data D-2.1.2.创建my.cnf文件在/data/3309 [client] port=3309 socket=/data/3309/mysql.sock prompt=\\[email protected] \\r:\\m:\\s-> [mysqld] basedir =/mysql datadir =/data/3309/data port =3309 serve

windows RAC 删除失败节点,添加节点实例操作文档

平台介绍: (OS:Windows server 2004, Oracle :10.2.0.4.0 ) 实施步骤: (1)重新安装rac2的操作系统 (2)删除节点 (3)添加新节点 (4)配置新的节点 一.安装RAC2操作系统(步骤略). 二.删除节点: 2.1 Onrac1, or on any node that you are not deleting, run the following   command from CRS_home\bin crssetup del –nnnode_

基于C#实现的HOOK键盘钩子实例代码

本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle">是您自己的钩子函数的句柄.用该句柄可以遍历钩子链</param><param name="nCode">把传入的参数简单传给CallNextHookEx即可</param><param name="wParam"&g

C# Hook钩子实例代码之截取键盘输入,需要的朋友可以参考下

一.关于本文 以最通俗的语言说明钩子的使用方法,具体到钩子的详细介绍可以参照下面的网址: http://www.microsoft.com/china/community/program/originalarticles/techdoc/hook.mspx 二.钩子的简单介绍 从字面上理解,钩子就是想钩住些东西,在程序里可以利用钩子提前处理些Windows消息. 例子:有一个Form,Form里有个TextBox,我们想让用户在TextBox里输入的时候,不管敲键盘的哪个键,TextBox里显示

SQL Server 2012 无人值守安装(添加新实例)

方法1,通过指定条个参数安装 setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=install /PID=<validpid> /FEAT URES=SQL,AS,RS,IS,Tools /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="MyDomain\MyAccount" /SQLSVCPASSWORD="************" /SQLSYSADMINACCO

添加缓存实例

@Servicepublic class ItemServiceImpl implements ItemService { @Autowired private TbItemMapper itemMapper; @Value("${REDIS_ITEM_KEY}") private String REDIS_ITEM_KEY; @Value("${REDIS_ITEM_EXPIRE}") private Integer REDIS_ITEM_EXPIRE; @Aut

UML类图关系(转,添加了实例)

UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) [泛化关系]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为.例如:老虎是动物的一种,即有老虎的特性也有动物的共性. [箭

ExtJs 添加员工 实例 ---- 锚点布局 anchor 可自动伸缩

代码如下: <script type="text/javascript"> Ext.onReady(function () { // 创建一条记录行, job 为 displayField 名称 var JOB = Ext.data.Record.create([{ name: "job"}]); new Ext.Window({ title: "添加人员", width: 500, height: 350, layout: &quo