목차
回复内容:
백엔드 개발 PHP 튜토리얼 javascript - 麻烦帮解释一下,什么叫“钩子”?

javascript - 麻烦帮解释一下,什么叫“钩子”?

Jun 06, 2016 pm 08:19 PM
javascript php

麻烦帮解释一下什么叫“钩子”。

回复内容:

麻烦帮解释一下什么叫“钩子”。

钩子呢,英文叫做Hook,翻译过来应该叫做鱼钩;
举个例子:
你在你的钥匙上弄一条线绑着,然后在线上面弄一个钩子,你可以把这个钥匙挂在衣架上,也可以把这个钥匙挂在你的窗帘上。嗯这个也许不够生动和形象,再来一个:
javascript - 麻烦帮解释一下,什么叫“钩子”?
在这里,这个衣架就相当于一个钩子,这个钩子的作用可以把毛巾挂到那上面的挂钩上。

这里大概是这样的一个意思,在程序里来说就是你定义了一个小功能,可以在任何想用的地方挂上去。这个小功能利用钩子挂上去,比如评论列表展示,可以是一个钩子,在需要的地方挂上去。
这个东西和插件其实差不多,但是我觉得的话,插件的功能相对于钩子来说,更复杂,钩子的话,功能更单一更灵活。

所以,我觉得符合钩子思想的东西就是钩子,程序如此,生活中的东西也如此

不知道是否准确,一个具体化的说法叫回调函数。linux内核中就有很多这样的机制,底层用c语言的函数指针来调用函数,顶层将该指针指向某个函数,以此来达到解耦代码的目的

"钩子"是一种形象的叫法,在可一“放置”钩子的地方,我们叫其为“挂载点”

我个人对钩子的理解就是:在一个有序的步骤中的特殊位置(挂载点),插入自定义的内容。这就叫"钩子"。

在ThinkPHP中,有前置钩子和后置钩子,他们用来设置在增,删,改,查数据前后的自定义操作。

在CodeIgniter中,钩子更为的灵活,灵活有系统执行早起的钩子,也有系统执行之后的钩子。非常能满足开发者的极客思想。

我理解的钩子,是指在模板方法模式的父类算法框架中隔离容易变化部分的一种方式。
比如父类的算法框架init()中默认依次执行A操作——B操作——C操作,正常情况下它的大部分子类也都按照这个流程来执行,但如果有一个特定的子类,它不想执行B操作,那么我们可以在父类中封装一个钩子invokeB,默认为true,当且仅当它为true的时候执行B操作,然后再到子类中将继承的invokeB设置为false,这样调用该子类的init()的时候就会跳过B操作了。

我也来凑个热闹。我觉得钩子(hook)就是:

提供一个可以影响默认的(或原有的)流程(机制)的时机

通常就是:一个库、一个框架、一个系统或一种语言,提供一个对外公开的接口,通过这个接口,用户能够影响库、框架、系统或程序的行为。

至于具体实现,那是千差万别的。举个例子就是有同学提到了:Java中的模板方法。

最直观的理解就是 你要访问某个帖子 然而这个帖子有权限验证 必须要登录会员才能访问 那么 这个权限验证的过程也可以称之为hook钩子 简单地说 以某个条件触发的行为 就是钩子

用javascript举个栗子:
alert是js的原生函数对不对,我们想要改造alert函数,这个时候,oriAlert就是一个钩子函数。

<code>var oriAlert = window.alert;
window.alert = function(txt){
    //改造函数
    oriAlert(txt);
}</code>
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

CakePHP 로깅 CakePHP 로깅 Sep 10, 2024 pm 05:26 PM

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

See all articles