php中的钩子理解及应用实例分析


Posted in PHP onAugust 30, 2019

本文实例讲述了php中的钩子理解及应用。分享给大家供大家参考,具体如下:

钩子的解释

钩子定义

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

钩子作用

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

钩子实现

/*钩子的完整实现应该叫事件驱动。事件驱动分为两个阶段,第一个阶段是注册事件,目的是给未来可能发生的“事件”起一个名字,简单的实现方法是
用单例模式产生一个持久的对象或者注册一个全局变量,然后将事件名称,以及该事件对应的类与方法插入全局变量即可。也就是挂载一个钩子。
第二个阶段是触发事件,本质上就是在事件的全局变量中查询要触发的事件名称,然后找到注册好的类与方法,实例化并运行。这样子就可以摆
脱传统方式中程序必须按顺序的规则,进一步实现解除耦合的目的。
*/

代码示例一

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();

代码示例二

// 如果需要添加小孩,就可以做添加一个小孩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');

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP集成FCK的函数代码
Sep 27 PHP
PHP中设置时区方法小结
Jun 03 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php模板函数 正则实现代码
Oct 15 PHP
php简单的留言板与回复功能具体实现
Feb 19 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
php生成gif动画的方法
Nov 05 PHP
Yii清理缓存的方法
Jan 06 PHP
Zend Framework教程之MVC框架的Controller用法分析
Mar 07 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
php封装的mysqli类完整实例
Oct 18 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
Yii框架分页技术实例分析
Aug 30 #PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 #PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 #PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 #PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 #PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 #PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 #PHP
You might like
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
JavaScript静态的动态
2006/09/18 Javascript
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
javascript常用的方法分享
2015/07/01 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
Python如何发布程序的详细教程
2018/10/09 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
函授自我鉴定
2013/11/06 职场文书
安全生产投入制度
2014/01/29 职场文书
网络营销策划方案
2014/06/04 职场文书
县委务虚会发言材料
2014/10/20 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
Python合并多张图片成PDF
2021/06/09 Python
windows系统搭建WEB服务器详细教程
2022/08/05 Servers