php钩子使用场景

经常听说php钩子,但是一直没明白钩子使用场景,麻烦各位发表下自己的使用心得,我想学习学习

阅读 6.3k
6 个回答

拉一个最直接的实例!!


function test($on_start = null, $on_end = null) 
{
    if (is_callable($on_start)) {
        call_user_func($on_start);
    }
    
    //这里做其他事情
    
    if (is_callable($on_end)) {
        call_user_func($on_end);
    }
}

//比如我有一个需求想获取到test函数的运行时长
$start_time = 0;
$on_start = function() use($start_time) {
    $start_time = microtime(true);
};

$on_end = function() use($start_time) {
    echo "test函数运行时间为:", microtime(true) - $start_time, "秒";
};

test($on_start, $on_end);

钩子相当于一个插件,在某些执行顺序上插入进去。

钩子,我们在日常生活中可以挂东西上面,方便拆卸。
代码中其实也是一样,在程序运行过程代码中每一个阶段,我们插入一个钩子函数。函数中并不包含具体的执行逻辑。在后期需要调用的时候 传入具体的执行对象。在代码程序执行到那边的时候就会触发钩子函数。
之前看tp源码的时候,里面的事务概念就是钩子。题主可以看看。

钩子(Hook)实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
-- 以上是搜的概念
实际上钩子可以理解为“事件驱动”,当特定的事件到来的时候钩子函数接管处理,也就是说提前注册一些事件(称为钩子的挂载),当程序执行到挂载点的时候会按注册的规则来执行。

钩子,其实就是一个挂载点,简单点说就是为了开发扩展。
比如:wordpress
发布一条文章后,会有挂载点,我们可以写任意的代码,挂到这个点,当我们发布文章的时候,就会自动加载这些代码。
比如我们写一个提交链接到百度的代码,并用wordpress自带的钩子,挂载到发布文章这里;这样我们每次发布文章的时候,就会自动提交链接给百度。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题