php中钩子hook的实现原理

php中钩子hook的实现原理

大家好,又见面了,我是全栈君。

钩子定义

钩子是编程里一个常见概念,非常的重要。它使得系统变得非常容易拓展,(而不用理解其内部的实现机理,这样可以减少很多工作量)。

钩子作用

钩子函数可以截获并处理其他应用程序的消息。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

钩子实现

钩子的完整实现应该叫事件驱动。事件驱动分为两个阶段,第一个阶段是注册事件,目的是给未来可能发生的“事件”起一个名字,简单的实现方法是用单例模式产生一个持久的对象或者注册一个全局变量,然后将事件名称,以及该事件对应的类与方法插入全局变量即可。也就是挂载一个钩子。

第二个阶段是触发事件,本质上就是在事件的全局变量中查询要触发的事件名称,然后找到注册好的类与方法,实例化并运行。这样子就可以摆脱传统方式中程序必须按顺序的规则,进一步实现解除耦合的目的。

<?php

/**
 * 定义钩子
 * Date: 2021/8/25 9:50
 */
class Hook
{
    private $hooklist = null;

    //添加
    public function add($people)
    {
        $this->hooklist[] = new $people;
    }

    //触发事件
    public function exec()
    {
        foreach ($this->hooklist as $people)
        {
            $people->act();
        }
    }
}

/** 钩子实现
 * Date: 2021/8/25 9:55
 */
class man
{
    public function act()
    {
        echo 'this is man <br>';
    }
}

class WoMen
{
    public function act()
    {
        echo 'this is women <br>';
    }
}

class child
{
    public function act()
    {
        echo 'this is a child <br>';
    }
}

/**注册事件
 * Date: 2021/8/25 9:56
 */
class Ball
{
    public function __construct()
    {
        $this->hook=new Hook();
    }
    public function down()
    {
        echo 'ball is downing <br>';
        //添加,去掉钩子
        $this->hook->add('man');
        //$this->hook->add('woMen');
        $this->hook->add('child');
    }

    public function dothing()
    {
        $this->hook->exec();
    }
}

$ball = new Ball();
$ball->down();
$ball->dothing();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111459.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 诺基亚智能手机知识大全

    诺基亚智能手机知识大全一、购买篇去买手机时的注意事项:买手机的时候一般注意一下有没有什么使用过的痕迹,看看通讯记录里有没有打过电话,有没有存乱七八糟的照片,还有看看电池触点磨损情况,按住#键5秒以上看看是否有切换线路选项;再者就是看屏幕有没有坏点,手机上的坏点可以说直接用肉眼就能看出来的,不象数码相机上的坏点还得通过软件测试,打开手机的照相机拍一张全黑的照片,在遮上一张白纸对着光照一张全白的照片(千万不要直接对着光线照

    2022年7月11日
    28
  • ssl证书绑定域名还是ip_ssl证书类型

    ssl证书绑定域名还是ip_ssl证书类型答案:IP地址可以申请SSL证书实现IP的https加密,快速拿到IP证书,请直接联系本站右侧在线客服。环度网信是可以帮助您的IP实现https加密的,只需要您满足如下几个条件:1、您的IP地址是公网IP,暂不支持内网IP申请可信的SSL证书,因为只有公网IP是全球唯一的,能够验证IP所有者的管理权限。2、您的IP需要开通或者临时开通80或者443端口,因为我们在验证您的IP管理权限的时候,会给您…

    2022年9月30日
    6
  • 智能手机Symbian操作系统入门知识整理

    智能手机Symbian操作系统入门知识整理1.什么是S60。    什么是OS6/7/8/9,什么是J2ME。    什么是MIDP根据人机界面的不同Symbian操作系统分为S60、S80、S90和UIQ,发展不同用户界面的目的是为了让手机厂商有更多的选择以投入Symbian手机的开发。S60用户界面(UI)专门为简便、单手使用而设计。S60平台提供了基于SymbianC的。    开放的。    标准的开

    2022年7月11日
    20
  • (2021 最新版)IntelliJ IDEA 下载安装及配置教程

    (2021 最新版)IntelliJ IDEA 下载安装及配置教程前言因为自己电脑最近实在是太卡了,也一直提示更新,索性就直接重装了个系统。因为需要重装下IDEA,而现在新版本的IDEA和之前的版本还是有很大变化的,所以在这里写一篇博客做个记录,方便自己后续配置,也顺便分享给大家。准备工作既然要安装IDEA,那么首先需要前往JetBrains的官网下载最新版的IDEA,下载地址如下:https://www.jetbrains.com/idea/download/这里最新的版本是2021.1.2,而因为我有旗舰版的账号,所以这里就以旗舰版安装

    2022年5月20日
    917
  • tar 打包压缩目录

    tar 打包压缩目录tar打包压缩目录tar-czfsmall.tar.gzsmall(目录名) ;压缩并打包目录查看cpu信息 | crontab10:51浏览(11421)评论 (2)分类: linux相关推荐评论2楼 Du

    2022年5月31日
    59
  • c语言将时速转换成配速,配速和时速换算(配速时速换算)

    c语言将时速转换成配速,配速和时速换算(配速时速换算)时间除以路程,一般时间单位用分,路程单位用千米。比如20分钟跑了3千米,那配速就是20/3=6.66,也就是6分40秒每公里,一般说成640的配速。配速是针对长跑来说的,对短跑和中跑是不采用这个概念的。马拉松运动讲究匀速,在匀速的状态下才能更好地发挥自己的实力。很多跑步爱好者很注意控制速度。他们根.时速的意思是当时跑步的速度,配速是平均每公里耗时几分钟消耗是指跑步消耗的热量相当于每小时跑多少千…

    2022年6月28日
    170

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号