打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
从头学习Drupal--基本架构二 | Drupal China

从头学习Drupal--基本架构二

xeopn 于 周六, 2008-06-21 00:11 提交。

前面说了, Drupal的逻辑层由一个核心框架和一系列的功能模块(Module,可以看成插件)构成, 框架与模块间的协调就是通过钩子机制来实现,所以钩子机制是Drupal模块化系统的关键。什么是钩子机制, 它与面向对象的接口(Interface)类似,就是为规范定义了两个实体间的功能界面, 使得实现了该界面的实体能进行交互. 在Drupal里,钩子就是Drupal框架与模块间进行交互的接口, 但由于Drupal没有面向对象的机制, 所以它采用编程规约来讨巧地实现.
在Drupal里, 钩子就是一系列需要实现特定功能的函数, 它们约定好了输入参数和返回类型, 同时约定以xxx_yyy() 的形式来命名,其中xxx是要实现功能的模块名称,而yyy则是具体的钩子名称 . 举个例子, 你就更清楚了. 例如我有个模块叫myexamplemodule,现在我想在footer中添加一些Javascript代码,于是我在我的模块代码中实现一个叫myexamplemodule_footer()的函数, 在此函数中我实现了我想要功能; 于是用户请求页面时,Drupal的框架会检测到我的模块有myexamplemodule_footer()函数, 并且它会自动调用它, 是不是很简单明了呢!Drupal核心框架的这种调度机制, 屏蔽了用户自定义模块与框架间的实际交互, 简化了的开发, 因为你只要实现一个函数即可,别的事情系统已经替你完成了. 更多的hook请查看Drupal的文档库.

Hook机制主要在模块管理(includes/module.inc)中实现, 主要有的四个主要函数, 非常简单.

module_hook($module, $hook)

 

判断某模块是否实现某钩子

 

module_implements($hook, $sort = FALSE, $refresh = FALSE)

 

判断哪些模块实现某钩子, 返回模块名数组

 

module_invoke()

 

调用具体模块的具体钩子, 变长参数, 参数包括模块名, 钩子名, 还有钩子函数的参数

 

module_invoke_all()

 

调用所有模块的具体钩子, 变长参数, 参数包括钩子名, 钩子函数的参数

下面看一下module_invoke_all()函数的具体实现, 该函数会在Bootstrap过程中被框架调用.

 

<?php
function module_invoke_all() {
      
$args = func_get_args();
      
$hook = $args[0];
       unset(
$args[0]);
      
$return = array();
       foreach (
module_implements($hook) as $module) {
         
$function = $module .‘_‘. $hook;
         
$result = call_user_func_array($function, $args);
          if (isset(
$result) && is_array($result)) {
             
$return = array_merge_recursive($return, $result);
          }
         else if (isset(
$result)) {
            
$return[] = $result;
         }
  }
  return
$return;
}
?>

Drupal的钩子实现起来也比较灵活, 不想实现某钩子, 不写那个函数即可, 这样可以减少PHP文件的代码, 提高效率.不过看起来还是有些庞大的感觉, 因为只要实现了该钩子函数的模块, 就会被调用, 这样应该会导致在输出某内容时,系统还会加载并执行其他无关的模块. 总之, 粗浅一看, 这里应该是个性能瓶颈.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
使用开源软件设计、开发和部署协作型 Web 站点,第 10 部分: 外部网 Web 站点的...
linux中钩子函数的理解
andorid jar/库源码解析之frida体验
Webpack 详解
PE文件格式与API HOOK
HOOK API——Windows核心编程 第22章 插入DLL和挂接API学习笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服