PHP中钩子函数的实现与认识

PHP中钩子函数的实现与认识

分类:PHP编程  作者:rming  时间:2014-09-21

假如有这么一段程序:

  1. function fun(){
  2. fun1();
  3. fun2();
  4. }

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

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

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

例如:

  1. $h=config_item("parser_fun") ;//从配置文件中获得相应的配置信息
  2. function fun($data){
  3. global $h;
  4. return $h();
  5. }

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

  1. $c=get_class_name(); //获得类的名字
  2. $m=get_method_name(); //获得方法的名字
  3. $k=$c->$m(); //执行类的某一个方法

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

 


  • 1、钩子函数是预设并在特定的条件下触发的。
  • 2、钩子函数接管程序后可以影响到程序的走向。

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

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

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



 

posted @ 2015-04-23 14:08  fleam  阅读(1120)  评论(0编辑  收藏  举报