PHP如何创建简单的钩子


PHP How to create simple hook?

我已经试过用谷歌搜索如何做到这一点,但我仍然搞不清楚。如何在PHP中创建一个简单的钩子?以下是我迄今为止所尝试的:

wrapper.php(应用程序从这里开始)

<?php   require 'core.php';   ?>
<?php   require 'view.php';   ?>

core.php

<?php
$hooks['hook_head'] = array();
//supposed to insert action in $hooks
function addHook($hookName, $funct){
    global $hooks;
    array_push($hooks[$hookName], $funct);
}

//supposed to execute specific hook
function executeHook($hookname){
    global $hooks;
    foreach($hooks[$hookname] as $funct){
        call_user_func( $funct );
    }
}
//supposed to execute action in $hooks when array key = hook_head
function hook_head(){
    global $hooks;
    if (array_key_exists('hook_head', $hooks)) {
        executeHook( 'hook_head' );
    }
}
//supposed to execute action in $hooks when array key == hook_footer
function hook_footer(){
    global $hooks;
    if (array_key_exists('hook_footer', $hooks)) {
        executeHook( 'hook_footer' );
    }
}
?>

view.php

<!DOCTYPE HTML>
<html>
<head>
    <?php   hook_head();  ?>
</head>
<body>
    <hr />
    <?php
        //add action to hook start here
        $test = function(){    echo "test succeds";    };
        addHook('hook_head', $test);
    ?>
    <?php  hook_footer();  ?>
</body>
</html>

如果在调用hook_head()之前,在$hooks['hook_head']中插入一个操作,代码就可以正常工作。不过,我实际上想做的是在调用hook_head()之后插入操作。我该怎么做?

addHook调用移动到hook_head调用之前(最好移动到文件的开头)。

我确实注意到您"想在调用hook_head()之后开始编码(在hookhead中插入操作)",但这非常麻烦。它看起来像这样:

  • 更改hook_head()以在输出中插入某种令牌
  • 在脚本的末尾,
    1. 调用ob_get_clean()获取页面的输出缓冲区
    2. 对于每个挂钩:
      1. 执行挂钩
      2. 再次调用ob_get_clean()获取钩子的输出缓冲区
      3. 将页面的oputput缓冲区中的相应令牌替换为钩子的输出缓冲区
    3. 打印页面的输出缓冲区

正如我所说:繁琐。我强烈建议不要这样做。我之所以提到它,是因为你提出了具体要求。它与的直观控制流程相矛盾

  1. 输入
  2. 正在处理
  3. 输出