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 金额数字转换成英文
May 06 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
Jul 05 PHP
php实现两个数组相加的方法
Feb 17 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
PHP线程的内存回收问题
Jul 08 PHP
解决PhpStorm64不能启动的问题
Jun 20 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
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
layui实现动态和静态分页
2018/04/28 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
Python实现包含min函数的栈
2016/04/29 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
函授自我鉴定
2013/11/06 职场文书
办公文员的工作岗位职责
2013/11/12 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
党员自我对照检查材料
2014/08/19 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
小型婚礼主持词
2015/06/30 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
聊一聊python常用的编程模块
2021/05/14 Python
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫