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应用技巧
Mar 27 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
php设计模式之命令模式的应用详解
May 21 PHP
PHP函数之日期时间函数date()使用详解
Sep 09 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
PHP-FPM 的管理和配置详解
Feb 17 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
js实现图片轮播效果
2015/12/19 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
python图像处理之反色实现方法
2015/05/30 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
python实现事件驱动
2018/11/21 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python 如何对logging日志封装
2020/12/02 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
八年级英语教学计划
2015/01/23 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
Python学习开发之图形用户界面详解
2021/08/23 Python
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server
python处理json数据文件
2022/04/11 Python
Go语言入门exec的基本使用
2022/05/20 Golang