什么是钩子?[关闭]


15

我在各种编程文章中都经常遇到这个术语。但是我不明白它们是什么,以及如何使用它们。所以我只想知道钩子的概念是什么?如果有人可以将我链接到一些示例,尤其是在Web开发的情况下,那将是很好的。


挂钩方法是抽象类中的一种具体方法,可以被子类覆盖,但是它在抽象类中具有默认行为。
gal007 '04

Answers:


18

我的答案与用PHP编写的WordPress有关,但这是一种通用的开发机制,因此尽管您在问题标题中加上了“ python”,也没关系。

巧合的是,在Web开发中使用钩子的一个很好的例子是WordPress的钩子

它们的适当命名是因为它们允许“挂钩”程序执行的某些点。

因此,例如,wp_head是一个“动作”,当呈现WordPress主题时会发出该动作,它位于渲染<head>标签内的零件的位置。假设您要编写一个插件,该插件需要其他样式表,脚本或通常在这些标记中包含的内容。您可以通过定义发出该动作时要调用的函数来“挂钩”该动作。就像是:

add_action('wp_head', 'your_function');

your_function() 可能很简单:

function your_function() {
    echo '<link rel="stylesheet" type="text/css" href="lol.css" />';
}

现在,当WordPress通过执行类似的操作发出此动作时do_action('wp_head');,它将看到your_function()“钩住”了该动作,因此它将调用该函数(并根据需要将任何参数传递给它,如文档中针对任何特定钩子所定义的那样)。)。

长话短说:它允许您通过“钩住”这些点,在大多数情况下,通过分配函数回调,在程序执行的特定点添加其他功能。


2

根据询问者的背景,有时这个问题的答案可能很简单,因为钩子通常是事件处理程序的另一个词,Blaenk对此做了很好的解释。

当您将事件或代码注入到没有其他事件(例如,痣)的过程中时,也会使用此短语。


谢谢Bill,moles看起来像.NET概念,这对我来说完全陌生,能否请我指出一些pythonic或php或更一般的东西。
拉斯姆斯(Rasmus)2010年

不幸的是,我并没有足够多地使用这两个来要求专业知识,但是如果我正确地阅读它,我相信stackoverflow.com/questions/156230/…是正在讨论的类似想法,但是痣可以钩住已编译的程序集。微型端口驱动程序是有时使用钩子短语的另一个地方。我的意思是,“挂钩”术语有时可以以另一种方式使用,无论如何在较旧的MS技术中,也许第二种用法也不适用于python。
比尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.