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生成缩略图的函数代码(修改版)
Jan 18 PHP
PHP session会话的安全性分析
Sep 08 PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
php解析xml方法实例详解
May 12 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
php图像处理类实例
Jul 28 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
php图片添加水印例子
Jul 20 PHP
phpinfo的知识点总结
Oct 10 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 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.ini 中文版
2006/10/28 PHP
PHP XML数据解析代码
2010/05/26 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python 文件操作实现代码
2009/10/07 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python 加密与解密小结
2018/12/06 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
PHP中如何使用Cookie
2015/10/28 面试题
婚假请假条怎么写
2014/04/10 职场文书
学校师德承诺书
2014/05/23 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
交通事故起诉书
2015/05/19 职场文书
员工旷工检讨书
2015/08/15 职场文书
python缺失值的解决方法总结
2021/06/09 Python
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
源码安装apache脚本部署过程详解
2022/09/23 Servers