我最近在和一些人谈论我正在编写的程序时听到了“hook”这个词。我不确定这个术语到底意味着什么,尽管我从对话中推断钩子是一种函数类型。我寻找一个定义,但无法找到一个好的答案。有没有人能告诉我这个术语的一般含义,或者举个小例子来说明这个定义?


当前回答

简而言之,您可以更改API调用的代码,例如MessageBox,使其执行由您编辑的不同函数(全局适用于系统范围,本地适用于进程范围)。

其他回答

编程中的钩子是一种技术,它使用所谓的钩子来创建一个过程链作为事件处理程序。

在一般意义上,“钩子”是让程序员查看和/或与/或改变系统/程序中已经发生的事情的东西。

例如,Drupal CMS为开发人员提供了钩子,允许他们在创建“内容节点”之后采取额外的操作。如果开发人员没有实现钩子,则按常规创建节点。如果开发人员实现了钩子,他们可以在创建节点时运行一些额外的代码。这段代码可以做任何事情,包括回滚和/或更改原始操作。它还可以做一些与节点创建完全无关的事情。

回调可以被认为是一种特定类型的钩子。通过在系统中实现回调功能,该系统允许您在操作完成后调用一些额外的代码。然而,钩子(作为一个通用术语)并不局限于回调。

另一个例子。有时Web开发人员会将元素上的类名和/或id称为钩子。这是因为通过在元素上放置ID/类名,他们可以使用Javascript修改该元素,或“钩入”到页面文档。(这是一个延伸的意思,但它是常用的,值得一提)

简而言之,您可以更改API调用的代码,例如MessageBox,使其执行由您编辑的不同函数(全局适用于系统范围,本地适用于进程范围)。

在Drupal内容管理系统中,“hook”有一个相对特定的含义。当内部事件发生时(例如内容创建或用户登录),模块可以通过实现一个特殊的“钩子”函数来响应该事件。这是通过命名约定完成的——例如,用户登录事件的[your-plugin-name]_user_login()。

由于这种惯例,底层事件被称为“钩子”,并在Drupal的API文档中以“hook_user_login”和“hook_user_authenticate()”这样的名称出现。

Hook表示在代码中分派某个类型的事件的位置,如果该事件在此之前已使用适当的函数进行回调,那么它将由这个已注册的函数处理,否则什么都不会发生。