Php 区分Drupal钩子实现和常规函数

Php 区分Drupal钩子实现和常规函数,php,drupal,naming-conventions,hook,drupal-hooks,Php,Drupal,Naming Conventions,Hook,Drupal Hooks,我有几个关于Drupal编码约定的问题,我无法从文档或代码中找到 除了知道Drupal中每个钩子的名称外,还有什么方法可以区分实现钩子的函数和只为钩子提供一点功能的函数吗?要么是通过代码强制执行的,要么是某种约定 第二,可能是相关问题。在回顾了核心模块之后,我注意到一些函数的名称带有一个前导下划线 function _node_rankings(SelectQueryExtender $query) { ... } 下划线的含义是什么?我的假设是它模仿了“受保护”的约定,这意味着它只能

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

除了知道Drupal中每个钩子的名称外,还有什么方法可以区分实现钩子的函数和只为钩子提供一点功能的函数吗?要么是通过代码强制执行的,要么是某种约定

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

function _node_rankings(SelectQueryExtender $query) {
    ...
}
下划线的含义是什么?我的假设是它模仿了“受保护”的约定,这意味着它只能从
节点.module
文件中的其他函数调用;然而,我找不到任何东西来证实这一点


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

没错,函数名中的下划线前缀表示它应该被视为私有函数,只能由声明它的模块调用

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


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

没错,函数名称中的下划线前缀表示它应该被视为私有函数,只由声明它的模块调用

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


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

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

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

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

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

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

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

在对stardarts进行编码的早期,我假设他们将“下划线”约定删除为不寻常……在对stardarts进行编码的早期,我假设他们将“下划线”约定删除为不寻常…+1作为信息。我见过,但它现在总是在那里。我正在寻找一种确定性的方法(公平地说,我认为不存在这种方法)。如果您针对另一个模块运行编码器模块,它将告诉您哪些钩子实现缺少上述文档行:+1以获取信息。我见过,但它现在总是在那里。我正在寻找一种确定性方法(公平地说,我认为不存在这种方法)。如果您针对另一个模块运行编码器模块,它将告诉您哪些钩子实现缺少上述文档行: