假如有这么一段程序:

function fun(){

fun1();

fun2();

}

首先程序执行完fun1()之后执行fun2()然后fun()结束。

但是,假如我们想对函数做一些变化。比如说,fun是一个解析函数,我们希望后期可以提供丰富的解析函数,而究竟用哪个函数解析,我们希望在配置文件中配置。这个时候就可以发挥钩子的力量了。

我们可以在function fun(){}中加入一个挂钩点H,然后再执行H这个函数之前,将钩子函数配置好,我么就可以根据需要来解析了。

例如:

$h=config_item("parser_fun");//从配置文件中获得相应的配置信息

function fun($data){

global $h;

return $h();

}

除此意外,PHP还可以根据字符串提供自己的类,然后调用类的一个方法,传递某些参数,这些就为PHP程序的编写,以及后期的维护扩展奠定了,相当坚实的基础。

$c=get_class_name();//获得类的名字

$m=get_method_name();//获得方法的名字

$k=$c->$m();//执行类的某一个方法

原文链接:PHP中钩子函数&实现

1、钩子函数是预设并在特定的条件下触发的。

2、钩子函数接管程序后可以影响到程序的走向。

钩子的完整实现应该叫事件驱动。事件驱动分为两个阶段,第一个阶段是注册事件,目的是给未来可能发生的“事件”起一个名字,简单的实现方法是用单例模式产生一个持久的对象或者注册一个全局变量,然后将事件名称,以及该事件对应的类与方法插入全局变量即可。也就是挂载一个钩子。

第二个阶段是触发事件,本质上就是在事件的全局变量中查询要触发的事件名称,然后找到注册好的类与方法,实例化并运行。这样子就可以摆脱传统方式中程序必须按顺序的规则,进一步实现解除耦合的目的。

钩子函数可以截获并处理其他应用程序的消息。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

php钩子函数示例,PHP中钩子函数的实现与认识相关推荐

  1. matlab stem函数坐标轴_MATLAB中stem函数用法

    stem(Y) 将数据序列Y从x轴到数据值按照茎状形式画出,以圆圈终止.如果Y是一个矩阵,则将其每一列按照分隔方式画出. stem(X,Y)在X的指定点处画出数据序列Y.  stem(...,'fil ...

  2. java调用js匿名函数参数,js中匿名函数和回调函数

    匿名函数: 通过这种方式定义的函数:(没有名字的函数) 作用:当它不被赋值给变量单独使用的时候 1.将匿名函数作为参数传递给其他函数 2.定义某个匿名函数来执行某些一次性任务 var f = func ...

  3. findmid函数c语言,excel find函数用法_excel中mid函数的用法教程详解

    [www.gpsvo.com--管理学] Excel中经常需要使用到mid函数进行截取数据,mid函数具体该如何使用操作呢?下面是由小编分享的excel中mid函数的用法,以供大家阅读和学习. exc ...

  4. python中max函数用法_Python中max函数用法实例分析

    Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...

  5. python 遍历函数用法_python中enumerate函数遍历元素用法分析

    本文实例讲述了python中enumerate函数遍历元素用法.分享给大家供大家参考,具体如下: enumerate函数用于遍历序列中的元素以及它们的下标 示例代码如下: i = 0 seq = [' ...

  6. python中cos函数_Python代码中cos()函数有什么功能呢?

    摘要: 下文讲述Python代码中cos()函数的简介说明,如下所示: cos()函数功能 用于计算出x 弧度-所对应的的余弦值 cos()函数语法 math.cos(x) ---------参数说明 ...

  7. python里zip函数使用_Python中zip函数如何使用

    介绍 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. ps. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * ...

  8. oracle trunc函数 q,oracle中trunc函数的用法

    TRUNC函数返回以指定元素格式截去一部分的日期值. 其具体的语法格式如下: TRUNC(date,[fmt]) 其中: date 为必要参数,是输入的一个日期值 fmt 参数可忽略,是日期格式,用以 ...

  9. mysql contains函数用法_Oracle 中Contains 函数的用法有哪些

    Oracle 中Contains 函数的用法有哪些 发布时间:2020-07-10 16:14:49 来源:亿速云 阅读:175 作者:Leah Oracle 中Contains 函数的用法有哪些?很 ...

最新文章

  1. 读书笔记4数据的读入和保存
  2. Quartus16.0如何使用TCL脚本
  3. swiper.js使用心得
  4. 【CodeForces - 271B 】Prime Matrix (素数,预处理打表,思维)
  5. H5唤醒app,不完全兼容
  6. request.getAttribute()的数据类型转换问题
  7. uboot引导linux内核,u-boot启动内核的几种方式
  8. 测试 SEP 14 MP1 新功能 Duplicate Hardware ID 自动修复
  9. 计算机自动化专业强的二本大学,2020自动化专业大学排名公布
  10. 获取百度网盘直链下载链接的方法
  11. 说说Android应用的persistent属性
  12. 去中心化应用:区块链技术概述
  13. SDN 教程[2]: SDN基础操作
  14. 经济危机下,中国软件外包产业的走向
  15. 谷粒学院-首页数据显示-banner轮播图微服务搭建
  16. 第三方网页应用对接飞书Java版
  17. out of office ,out of the office,OOO的区别和联系
  18. 任何一个做计算机软件的人的梦想:墨绿,我们能做到吗?或者说,什么时候能做到?
  19. 乐视发布超4 X70/Max65/Max55 2017发力声学打造音质新标杆
  20. Data Protector

热门文章

  1. 第二阶段冲刺第六天(6月5号)
  2. 7.2.3 使用RenderTargetBitmap类生成图片
  3. [博客之路]如何增加一个博客的PR值(一)
  4. 87.VGA 88.FPGA
  5. Python将是人工智能时代的最佳编程语言
  6. 系统架构设计师难吗?IT行业员工的最高荣耀是什么
  7. 变量置换方式linux,Shell变量测试与内容置换
  8. java classname.this_java 中 类名.this与类名.class
  9. 多重if,嵌套if和switch case如何区别使用
  10. 031_yml配置文件