费了好些时间,终于把drupal hook机制弄明白了

在接触drupal之初,就对drupal的hook机制有点迷糊,但是又想弄清楚.
今天总算明白了,其实很简单.
核心就是module_invoke_all
怎么理解呢
比如在模块module_a有一个函数module_a_test,模块module_b有一个函数module_b_test.当然,里面可以带参数.

在一个地方,执行$str = module_invoke_all(‘test’).
那么$str里面,就是两个模块里面,hook_test的返回值了.

下面,就可以foreach($str as $v)进行处理hook_test的返回值了.
就这最后一步一直犯迷糊.总算想通了.纪念一下.

PS: 突然之间,想明白了.所谓的hook,就是可以批量获得特定函数返回值的一个函数.

比如$menus = module_invoke_all(‘menu’);,$menus就是s所有函数名以_menu结尾function的的返回值.当然,前提是这个module要激活.

下面,就可以写程序对$menus进行各种处理了.

下面顺便说说module_invoke.其实就是调用函数.
比如module_invoke(‘kk’,’ss’,$str);
这个执行的结果,跟下面的函数一样.
kk_ss($str);

下面附上module_invoke函数原型

function module_invoke_all($hook) {
  $args = function_exists($function)) {
      $result = is_array($result)) {
        $return = <a href="http://php.net/array_merge_recursive" _xhe_href="http://php.net/array_merge_recursive" title="" array="" array_merge_recursive(array="" $array1="" [,="" $...="" ])"="" class="php-manual" style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; vertical-align: baseline; color: rgb(0, 68, 136); text-decoration: none;">array_merge_recursive($return, $result);
      }
      elseif (isset($result)) {
        $return[] = $result;
      }
    }
  }


  return $return;
}



源:http://dplor.com/archives/267 


hook又叫钩子,其实是一个比较常见的插件机制,可以想象成事件触发机制,在页面请求的过程中,如果你觉得某个变量有可能需要被扩展,或者有可能有模块想做一些其他事情,那么就在那个点埋下一个钩子,程序运行到那个点时,会通过钩子机制,询问所有的模块是否实现了这个钩子(是否想在这个点做点什么),如果有,则调用模块实现的钩子回调,并执行。

源:http://www.zhihu.com/people/vipzhicheng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值