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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
用PHP查询搜索引擎排名位置的代码
Jan 05 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
初识PHP
Sep 28 PHP
php实现计数器方法小结
Jan 05 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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代码
2006/12/06 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
openPNE常用方法分享
2011/11/29 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
PHP6新特性分析
2016/03/03 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
Python实现完整的事务操作示例
2017/06/20 Python
Python定时任务sched模块用法示例
2018/07/16 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
任命书范本大全
2014/06/06 职场文书
师范生求职信
2014/06/14 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
商务司机岗位职责
2015/04/10 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
《花钟》教学反思
2016/02/17 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
python playwright 自动等待和断言详解
2021/11/27 Python
使用Django框架创建项目
2022/06/10 Python