【问题标题】:Creatig a hooks, filters fuctionality with php使用 php 创建钩子、过滤器功能
【发布时间】:2019-07-09 00:33:03
【问题描述】:

我计划构建一个包含模块化功能的简单应用程序,并且我计划使用与 WordPress 使用的类似技术,即 hooks!

我进行了一些挖掘,但没有找到正确的答案,或者找到了一些但太混乱了,所以有人可以向我解释 钩子功能如何工作以及我们如何使用核心 PHP 来实现它!

我的计划是创建一个主页并向主页添加模块(如 WordPress 插件),我做了一个基本的 WordPress 插件并遇到了一些钩子,如add_actionhas_actionremove_action 等等,以及一些过滤器,如add_filterhas_filterremove_filter

我们如何使用核心 PHP 从头开始​​实现这些功能?

如果有任何参考代码,博客或实现基本 hello world 应用程序的简单代码都可以!

我只是想学习新东西,请帮我把这个功能添加到主页,如果可以的话,给我解释一下过程!谢谢。

【问题讨论】:

标签: php wordpress plugins filter hook


【解决方案1】:

我对您的最佳建议是挖掘WordPress 代码,看看他们是如何做到的。

也就是说,我的理解是 WordPress 使用 php 的 $$ 功能。你可以阅读它here

它的要点是假设我有一个变量$a。我可以将其引用为$a 并获得它的价值。但是,假设我不知道我想要的值在$a 中。但我知道它位于$b 命名的变量中。也就是说,$b = "a"$$ 允许我说 echo $$b,它会回显 $a 的值。

这里有一个更完整的例子:

$a = "foo";
$b = "a";

echo $$b;

输出:

foo

整洁,嗯?

最后,我要提一下,Wordpress 将$$ 应用于函数。如果我只是做一个代码块会更容易:

$hooks = array();

function AddHook($hook,$funciton) {
    $hooks[$hook][] = $function;

}

function GetHook($hook) {
    foreach($hooks[$hook] as $func) {
         $func();
    }

}

或者类似的东西。所以,你可以这样使用它:

function myFunc() { /* Code */}

AddHook("myHook","myFunc");

GetHook("myHook");

附:我想这会使 Wordpress 成为mediator design pattern

【讨论】:

    【解决方案2】:

    Chipster 的答案是正确且有效的,但您必须将每个函数中的 $hooks 变量声明为全局变量,才能使完整代码正常工作。 无论如何感谢 Chipster 关于如何在 PHP 中创建钩子的更清晰(如果不是唯一)的答案。

    <?php
    global $hooks;
    
    $hooks = array();
    
    function addHook($hook, $function)
    {
        global $hooks;
        $hooks[$hook][] = $function;
    }
    
    
    function getHook($hook)
    {
        global $hooks;
        foreach ($hooks[$hook] as $func) {
            $func();
        }
    }
    
    function myFunc()
    {
        echo "hello!";
    }
    
    addHook("myhook", "myFunc");
    
    getHook('myhook');
    

    【讨论】:

      猜你喜欢
      • 2016-03-11
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多