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 高手之路(一)
Oct 09 PHP
如何在PHP中进行身份认证
Oct 09 PHP
PHP教程 变量定义
Oct 23 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
Yii实现简单分页的方法
Apr 29 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 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 setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
PHP常用数组函数介绍
2014/07/28 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
tensorflow获取变量维度信息
2018/03/10 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
Python 线程池用法简单示例
2019/10/02 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
小学教师师德承诺书
2014/05/23 职场文书
政风行风评议工作总结
2014/10/21 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js