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 05 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
windows下开发并编译PHP扩展的方法
Mar 18 PHP
php反射应用示例
Feb 25 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
php通过记录IP来防止表单重复提交方法分析
Dec 16 PHP
php语言的7种基本的排序方法
Dec 28 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 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
DSP接收机前端设想
2021/03/02 无线电
PHP生成静态页面详解
2006/11/19 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP函数超时处理方法
2016/02/14 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
javascript实现时钟动画
2020/12/03 Javascript
讲解Python中fileno()方法的使用
2015/05/24 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Python3内置模块random随机方法小结
2019/07/13 Python
Django实现分页显示效果
2019/10/31 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
工程力学专业毕业生求职信
2013/10/06 职场文书
项目负责人任命书
2014/06/04 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
商场租赁意向书
2014/07/30 职场文书
写景作文评语集锦
2014/12/25 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
react 路由Link配置详解
2021/11/11 Javascript
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang