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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
php 特殊字符处理函数
Sep 05 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
根据key删除数组中指定的元素实现方法
Mar 02 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
Laravel5.1框架路由分组用法实例分析
Jan 04 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 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
浅析get与post的一些特殊情况
2014/07/28 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
javascript 写类方式之一
2009/07/05 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
django输出html内容的实例
2018/05/27 Python
Python实现网站表单提交和模板
2019/01/15 Python
详解Python传入参数的几种方法
2019/05/16 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
建筑项目策划书
2014/01/13 职场文书
施工质量承诺书范文
2014/05/30 职场文书
增员口号大全
2014/06/18 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书