Creatig a hooks,用php过滤功能

时间:2019-02-14 21:50:31

标签: php wordpress plugins filter hook

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

我做了一些挖掘工作,没有找到合适的答案或找到了答案,但是它太混乱了,所以有人可以向我解释 hooks功能如何工作以及如何使用核心PHP实现它! >

我的计划是创建一个主页并将模块(如WordPress插件)添加到主页,我做了一个基本的WordPress插件,并遇到了诸如add_actionhas_action,{{ 1}}等,还有一些过滤器,例如remove_actionadd_filterhas_filter

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

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

我只是在尝试学习新事物,请帮助我将此功能添加到主页,并尽可能向我解释此过程!谢谢。

2 个答案:

答案 0 :(得分: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");

P.S。我想这会使Wordpress成为mediator design pattern

答案 1 :(得分:0)

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');