用php创建钩子、过滤器功能

用php创建钩子、过滤器功能,php,wordpress,plugins,filter,hook,Php,Wordpress,Plugins,Filter,Hook,我计划构建一个包含模块化功能的简单应用程序,并计划使用WordPress使用的类似技术,即hooks 我做了一些挖掘,没有找到一个正确的答案,或者找到了一些,但是这太令人困惑了,所以有人可以向我解释一下钩子功能是如何工作的,以及我们如何用核心PHP实现它 我的计划是创建一个主页并向主页添加模块(比如WordPress插件),我做了一个基本的WordPress插件,遇到了一些钩子,比如add\u action,has\u action,remove\u action等等,还有一些过滤器,比如add

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

我做了一些挖掘,没有找到一个正确的答案,或者找到了一些,但是这太令人困惑了,所以有人可以向我解释一下钩子功能是如何工作的,以及我们如何用核心PHP实现它

我的计划是创建一个主页并向主页添加模块(比如WordPress插件),我做了一个基本的WordPress插件,遇到了一些钩子,比如
add\u action
has\u action
remove\u action
等等,还有一些过滤器,比如
add\u filter
has\u filter
删除过滤器

我们如何用核心PHP从头开始实现这些函数

如果有任何参考代码,博客或简单的代码来实现一个基本的helloworld应用程序将工作


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

我给你的最好建议是深入挖掘代码,看看他们是如何做到的

也就是说,据我所知,WordPress使用php的
$$
功能。你可以读到它

它的jist是,假设我有一个变量
$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成为一个很好的工具。

我给你的最好建议是对代码进行一些挖掘,看看他们是如何做到的

也就是说,据我所知,WordPress使用php的
$$
功能。你可以读到它

它的jist是,假设我有一个变量
$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成为一个。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');

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

参考代码的可能副本见WordPress Codex,它有一些例子,你的问题表明你应该给它一些时间:我想看看一些应用程序来获得一个想法,但不,不是WordPress,我们在世界上不需要任何类似的东西。参考代码的可能副本见WordPress Codex,它有一些例子,你的问题表明你应该给它一些时间:我会看一些应用程序来获得一个想法,但不,不是Wordpress,我们在世界上不需要任何其他类似的东西。