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 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
一个简单的域名注册情况查询程序
Oct 09 PHP
php自动跳转中英文页面
Jul 29 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 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
adodb与adodb_lite之比较
2006/12/31 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
JavaScript中创建原子的方法总结
2018/08/26 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
Python中的True,False条件判断实例分析
2015/01/12 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Django 拆分model和view的实现方法
2019/08/16 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
经典c++面试题二
2015/08/14 面试题
商场促销活动总结
2014/07/10 职场文书
幼儿园开学通知
2015/04/24 职场文书
丧事答谢词大全
2015/09/30 职场文书