• 技术文章 >后端开发 >PHP问题

    PHP钩子是什么意思?

    GuanhuiGuanhui2020-07-31 14:21:58原创213

    钩子是一种事件驱动的消息处理机制,作用可以截获并处理其它应用程序的消息,每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。

    钩子实现

    钩子的完整实现应该叫事件驱动。事件驱动分为两个阶段,第一个阶段是注册事件,目的是给未来可能发生的“事件”起一个名字,简单的实现方法是

    用单例模式产生一个持久的对象或者注册一个全局变量,然后将事件名称,以及该事件对应的类与方法插入全局变量即可。也就是挂载一个钩子。

    第二个阶段是触发事件,本质上就是在事件的全局变量中查询要触发的事件名称,然后找到注册好的类与方法,实例化并运行。这样子就可以摆

    脱传统方式中程序必须按顺序的规则,进一步实现解除耦合的目的。

    代码示例一

    class Ball{
    public function down(){
    echo    "ball is downing ";
    //注册事件
    Hook::add("man");
    Hook::add("Women");
    }
    public function do(){
    Hook::exec();
    }
     
    }
     
    // 钩子的定义
    class Hook{
    private $hooklist = null ;
    // 添加
    public function add($people){
    $this->hooklist[] =  new $people();
    }
    // 触发事件
    public function exec(){
    foreach($this->hooklist as $people){
      $addon ->act();
    }
    }
    }
    // 钩子实现
    class man(){
    public function act(){
    echo 'notiong';
    }
    }
     
    class WoMan(){
    public function act(){
    echo 'oh my god ';
    }
    }
     
    class child(){
    public function act(){
    echo 'oh my god ';
    }
    }
     
     
    $ball = new Ball();
    $ball ->down();
    $ball ->do();

    代码示例二

    // 如果需要添加小孩,就可以做添加一个小孩Hook::add("child");
     
     /*=========================钩子的升级版============================================/*
    class Hook{
      private  $hookList;
      
      //添加
    function add($name,$fun){
    $this->hookList[$name][] = $fun;
     }
     
    function excec($name){
        $value = func_get_args();
        unset($value[0]);
        foreach ($this->hookList[$name] as $key => $fun) {
            call_user_func_array($fun, $value);
        }
    }
     
    }
    $hook = new Hook();
    $hook->add('women',function($msg){
    echo 'oh my god'.$msg ; 
    })
    $hook->add('man',function($msg){
    echo 'nothing'.$msg ; 
    })
    // 执行
    $hook->excec('man','taoge');
    $hook->excec('women','xxx');

    推荐教程:《PHP

    以上就是PHP钩子是什么意思?的详细内容,更多请关注php中文网其它相关文章!

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!
    专题推荐:php
    上一篇:php中字符串与字符替换用什么函数 下一篇:php如何设置错误日志存放路径
    第12期线上周末培训班

    相关文章推荐

    • php删除功能如何实现• php.ini中如何设置session时间• php数组如何去掉key• centos6.5如何安装php环境• php如何获取函数参数

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网