区分Drupal Hook实现和常规函数

时间:2011-02-21 01:51:55

标签: php drupal naming-conventions hook drupal-hooks

我有几个关于Drupal编码约定的问题,我无法从文档或代码中发现这些问题。

除了知道Drupal中每个钩子的名称之外,有没有办法区分实现一个钩子的函数和一个只为钩子提供一些功能的函数?通过代码或某些约定强制执行某些操作?

其次,可能是相关的问题。在查看核心模块之后,我注意到一些函数以前导下划线命名

function _node_rankings(SelectQueryExtender $query) {
    ...
}

下划线的含义是什么?我的假设是模仿“受保护”的约定,这意味着只能从node.module文件中的其他函数调用它。但是,我找不到任何确认这一点。

我知道Coding Standards,但它们似乎针对的是一般的PHP语法,而不是针对Drupal内部系统的约定。

2 个答案:

答案 0 :(得分:3)

你是对的,函数名中的下划线前缀表示它应该被视为私有函数,只有被声明它的模块调用。

我不知道这是否在Drupal的官方文档中,但drupal.org上有一些帖子确认了这一点(如thisthis)。

编辑:是的,它也可以避免将“正常”函数转换为钩子实现(尽管你应该尝试在现有钩子之后不命名函数)。

答案 1 :(得分:2)

在回答你的第一个问题时,如果你看一下大多数模块的代码,钩子实现上面的注释通常会说:

/**
 * Implementation of hook_foo().
 */

在使用Drupal一段时间后,您将开始识别最常见的钩子。