【问题标题】:Differentiating Between a Drupal Hook Implementation and a Regular Function区分 Drupal Hook 实现和常规函数
【发布时间】:2011-02-21 01:51:54
【问题描述】:

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

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

第二个可能相关的问题。在查看了核心模块后,我注意到一些函数的命名带有前导下划线

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

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

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

【问题讨论】:

  • 在编码stardarts的早期它就在那里,我认为他们删除了“下划线”约定是不寻常的......

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


【解决方案1】:

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

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

编辑:是的,它还可以避免将“普通”函数转换为钩子实现(尽管您应该尽量不在现有钩子之后命名函数)。

【讨论】:

    【解决方案2】:

    在回答您的第一个问题时,如果您查看大多数模块的代码,则挂钩实现上面的 cmets 通常会说:

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

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

    【讨论】:

    • +1 获取信息。我已经看到了,但它现在总是在那里。我正在寻找一种确定性的方式(公平地说,我认为不存在)。
    • 如果您针对另一个模块运行 Coder 模块,它会告诉您哪些钩子实现缺少上述文档行:drupal.org/project/coder
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多