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+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
php连接函数implode与分割explode的深入解析
Jun 26 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
PHP魔术方法的使用示例
Jun 23 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
详解php与ethereum客户端交互
Apr 28 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
python中的变量如何开辟内存
2018/06/26 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
详解小白之KMP算法及python实现
2019/04/04 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
车辆工程专业求职信
2014/06/14 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
小学班级特色活动方案
2014/08/31 职场文书
预备党员个人总结
2015/02/14 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
python标准库ElementTree处理xml
2022/05/20 Python