2019独角兽企业重金招聘Python工程师标准>>>

钩子定义

钩子是编程里一个常见概念,非常的重要。它使得系统变得非常容易拓展,而不用理解其内部的实现机理,这样可以减少很多工作量。
可以理解为当一个玻璃球从空中落下,即将砸到人的时候,有个事件会提前发生,例如告诉那个被砸的人,球已经在下落过程中,
告诉就是一个事件,一个钩子,我们可以针对不同的人做出不同的响应,如果是男人我们告诉他这个球砸到人不疼,如果是女人则告诉她很疼;

钩子作用

钩子函数可以截获并处理其他应用程序的消息。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息。即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

钩子实现

钩子的完整实现应该叫事件驱动

事件驱动分为两个阶段,第一个阶段是注册事件,第二个阶段是触发事件,

注册事件目的是给未来可能发生的“事件”起一个名字,简单的实现方法是用单例模式产生一个持久的对象或者注册一个全局变量,然后将事件名称,以及该事件对应的类与方法插入全局变量即可。也就是挂载一个钩子。

触发事件,本质上就是在事件的全局变量中查询要触发的事件名称,然后找到注册好的类与方法,实例化并运行。这样子就可以摆脱传统方式中程序必须按顺序的规则,进一步实现解除耦合的目的。

示例1:


class Ball{public function down(){echo "ball is downing ";//注册事件Hook::add("man");Hook::add("Women");}public function do(){Hook::exec();}  }// 钩子的定义
class Hook{private $hooklist = null ;// 添加public function add($people){        $this->hooklist[] =  new $people();     }// 触发事件public function exec(){foreach($this->hooklist as $people){$addon ->act();}}
}// 钩子实现
class man(){public function act(){echo 'notiong';}
}class WoMan(){public function act(){echo 'oh my god ';}
}class child(){public function act(){echo 'oh my god ';}
}$ball = new Ball();
$ball ->down();
$ball ->do();

示例2:

// 如果需要添加小孩,就可以做添加一个小孩Hook::add("child");/*=========================钩子的升级版============================================/*
class Hook{private  $hookList;//添加function add($name,$fun){$this->hookList[$name][] = $fun;}function excec($name){$value = func_get_args();unset($value[0]);foreach ($this->hookList[$name] as $key => $fun) {call_user_func_array($fun, $value);}}}$hook = new Hook();
$hook->add('women',function($msg){echo 'oh my god'.$msg ;
})$hook->add('man',function($msg){echo 'nothing'.$msg ;
})// 执行
$hook->excec('man','taoge');
$hook->excec('women','xxx');

转载于:https://my.oschina.net/u/3901362/blog/1840625

php中的钩子理解及应用相关推荐

  1. php钩子是啥意思,php中的钩子理解及应用实例分析

    本文实例讲述了php中的钩子理解及应用.分享给大家供大家参考,具体如下: 钩子的解释 钩子定义 钩子是编程里一个常见概念,非常的重要.它使得系统变得非常容易拓展,(而不用理解其内部的实现机理,这样可以 ...

  2. php钩子的作用,php中的钩子理解及应用实例分析

    本文实例讲述了php中的钩子理解及应用.分享给大家供大家参考,具体如下: 钩子的解释 钩子定义 钩子是编程里一个常见概念,非常的重要.它使得系统变得非常容易拓展,(而不用理解其内部的实现机理,这样可以 ...

  3. mysql 钩子_php中的钩子理解及应用实例分析

    本文实例讲述了php中的钩子理解及应用.分享给大家供大家参考,具体如下: 钩子的解释 钩子定义 钩子是编程里一个常见概念,非常的重要.它使得系统变得非常容易拓展,(而不用理解其内部的实现机理,这样可以 ...

  4. c++ dll 类使用_在.Net Core 中使用钩子

    目录 前言 什么是钩子 使用钩子 3. 挂载多个钩子 4. 在钩子中加载额外的程序集 5. 在 Asp.Net Web Api 项目中使用钩子 结束语 演示代码下载 前言     Host start ...

  5. JS每日一题:vue中keepalive怎么理解?

    20190212问 vue中keepalive怎么理解? 说在前面: keep-alive是vue源码中实现的一个组件, 感兴趣的可以研究源码 https://github.com/vuejs/vue ...

  6. windows中使用钩子拦截消息

    一.前 言 众所周知,Windows程式的运行是依靠发生的事件来驱动.换句话说,程式不断等待一个消息的发生,然后对这个消息的类型进行判断,再做适当的处理.处理完此次消息后又回到等待状态.从上面对Win ...

  7. Vue生命周期钩子理解

    #Vue生命周期钩子理解 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset= ...

  8. JavaScript中的钩子(钩子机制\钩子函数\hook)是什么?

    我的博客https://www.ideaopen.cn/ 首先,看到我们的标题: JavaScript中的钩子(钩子机制\钩子函数\hook) 是什么? 我们前端的JavaScript中,经常提到钩子 ...

  9. javascript中 (function(){})();如何理解?

    javascript中 (function(){})();如何理解? javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环 ...

  10. java抽象的理解_Java中抽象类的理解

    Java中抽象类的理解 创建   所有   bsp   抽象类   member   初始   dem   print ---------------------------------------- ...

最新文章

  1. 进击的python【第一集】
  2. Redis数据结构之字符串
  3. shell下输出字体颜色
  4. matlab添加多个legend
  5. CodeForce 534C Polycarpus' Dice (数学推理)
  6. PHP判断是否有Get参数的方法
  7. C语言之如何输出uint32_t和uint64_t和16进制
  8. 动手学PaddlePaddle(5):迁移学习
  9. 俄罗斯方块(C++)
  10. 【LeetCode】【HOT】581. 最短无序连续子数组
  11. Spring配置中的classpath:与classpath*:的区别研究(转)
  12. 我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)...
  13. 关于在CSDN中写博客时如何插入图片
  14. 【资讯】1225- Flutter 2.10发布,稳定支持Windows
  15. 一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱,一个农夫用100块钱买100只鸡(不许解方程),怎么实现?编写java程序。...
  16. 价值1K的微信二维码活码源码
  17. 7-3 狡猾的财主,个人思路及解答
  18. 为什么MacBook、MacOS的程序坞(dock栏docker栏)有些只有一条竖线有些两条
  19. 《暗黑世界》win下详细编译步骤,亲测通过
  20. leetcode 1109. 航班预订统计(C++、python)

热门文章

  1. 方正电脑如何关闭网络启动计算机,方正电脑怎么进安全模式
  2. Android ADB动态查看内存信息之Watch使用
  3. python标准库——sys模块
  4. php增加会员功能_在帝国CMS后台增加手动添加会员功能
  5. ai如何置入_AI中如何导入图形图像?
  6. 2021年江苏省高考成绩什么时候可以查询,2021年江苏高考成绩什么时候出来 成绩查询时间...
  7. 1.GNUradio 的环境搭建
  8. c++除法保留小数_BigDecimal 加减乘除、保留小位数
  9. python-图书管理系统4-最终完成界面代码文件
  10. python-gui-pyqt5的使用方法-5--为类增加信号