Eine Möglichkeit, sie aufzuteilen, besteht in der Eingabe und Ausgabe: 1) nur Eingabe, 2) nur Ausgabe, 3) Eingabe-Ausgabe und 4) keine Eingabe, keine Ausgabe.
Es gibt nicht viel von # 1, da fast alles, was passiert, eine Reaktion haben könnte. Die einzigen Beispiele, an die ich denken kann, sind Lösch-Hooks, z. B. hook_file_delete (), hook_comment_delete (), bei denen der Hook das gelöschte Objekt erhält, dieses Objekt jedoch bereits gelöscht ist. Es gibt also keinen Grund für eine Antwort.
Die "Registry-Style" -Hooks wären # 2 und würden nur ausgegeben. Sie geben nur Daten in eine zentrale Registrierung ein und nehmen keine Eingaben entgegen. hook_menu () und hook_help () sind Beispiele.
hook_nodeapi () war # 3, aber jetzt ist es in verschiedene Funktionen unterteilt, wie hook_node_presave () - immer noch # 3 - und hook_node_delete () - was jetzt # 1 ist. Dies ist die häufigste Gruppe. Viele der Beispiele haben explizit das Wort "alter" im Hook-Namen, z. B. hook_form_alter ().
So etwas wie hook_init () wäre # 4. Über die allgemeine Benachrichtigung über ein Ereignis hinaus gibt es keine Eingabe oder Ausgabe.
Das ist allerdings eine ziemlich willkürliche Aufschlüsselung. Sie könnten leicht argumentieren, # 3 in Hooks aufzuteilen, bei denen die Ausgabe dieselbe Struktur wie die Eingabe (alter) hat, im Gegensatz zu Hooks, bei denen die Ausgabe eine völlig andere Struktur hat (Call-Response). Oder Sie können # 1 und # 4 kombinieren, da der Funktionsaufruf selbst eine Art Eingabe ist, sodass der Unterschied nur in der Detailstufe liegt.