钩子,英文为hooks。在程序中应用相当广泛,但是究竟什么是钩子呢?本人介绍一下目前本人对钩子的理解和相关心得。
假如有这么一段程序流:
function fun(){
funA();
funB();
}
fun函数正常的执行顺序,肯定是执行完funA,然后执行funB,然后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中应用还是相当广泛的,就目前笔者所知的Codeigniter和Drupal中钩子的应用做出如下介绍:
CodeIgniter中钩子的应用,主要是将所有钩子应用给了一个类Hook类,他向开发者对CI进行扩展,CI提供了几个挂钩点,在CodeIgniter的整个执行过程中,加入一些开发者自己的函数,而在Hook类的内部,根据外部config.php和hooks.php中的相应配置,获得相应的类或者单独的函数,然后执行之。当然这些类或者方法都是开发者自己写的。这样就可以让开发者用的更加舒心,感觉比较舒服,毕竟每个开发者应该都想在一个框架中加入更多的自己的东西。详细情况可以参看CodeIgniter官方文档,关于钩子的那一节:CodeIgniter钩子应用.
而在Drupal中钩子的应用更是无处不在,他本身就是靠钩子维护了一个体系,Module,Block,Node各个部分的实现,都是经过根本的hook函数,然后将函数名经过相应的改变,然后调用该函数得到了整个的hook结构,甚至于到显示层theme的实现,都覆盖了theme主题的api,更加令人佩服的一件事是,他居然还可以用可视化的角度,来实现相应的theme钩子,这样就将主题的开发分为了开发者和设计者两大类,设计者对可视化更敏感,而开发者对函数更为敏感。两者都可以从各自的角度,对drupal进行相应的改变。岂不快哉!
分享到:
相关推荐
php钩子示例-认识php钩子
php钩子的核心类,php插件机制的实现,都 是由钩子的核心类来处理的
键盘钩子 键盘钩子 键盘钩子 键盘钩子 键盘钩子 键盘钩子 键盘钩子 键盘钩子 键盘钩子
全局钩子 中文 输入法 拦截 DLL DLL注入、输入法与键盘HOOK
行中接受信息之前预先启动的函数,用来检查和修改传给该程序的信息,(钩子)实 际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出, 在没有到达目的窗口前,钩子程序就先捕获该消息,...
VB Hook 钩子 键盘钩子 源代码VB Hook 钩子 键盘钩子 源代码
枚举消息钩子,钩子,消息钩子检测,供大家参考
编写钩子程序的步骤分为三步:定义钩子函数、安装钩子和卸载钩子。 1.定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不...
全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示全局键盘钩子演示
鼠标钩子的基本使用 和钩子卸载,还有键盘钩子c#
Hook钩子\钩子程序.pdfHook钩子\钩子程序.pdf
c++ hook 全局钩子 全局键盘钩子
vb.net (c#)中鼠标,键盘钩子Hook
钩子源码,希望大家用的上钩子源码,希望大家用的上
免费送了 包含两种钩子程序 键盘钩子和鼠标钩子 需要的朋友可以看看
Hook钩子Hook钩子Hook钩子Hook钩子,取得当前消息钩子处理
VS2005钩子 键盘钩子和鼠标钩子的简单实现 可安装卸载
钩子测试钩子测试钩子测试钩子测试钩子测试钩子测试