用php创建钩子、过滤器功能
我计划构建一个包含模块化功能的简单应用程序,并计划使用WordPress使用的类似技术,即hooks 我做了一些挖掘,没有找到一个正确的答案,或者找到了一些,但是这太令人困惑了,所以有人可以向我解释一下钩子功能是如何工作的,以及我们如何用核心PHP实现它强> 我的计划是创建一个主页并向主页添加模块(比如WordPress插件),我做了一个基本的WordPress插件,遇到了一些钩子,比如用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
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,我们在世界上不需要任何其他类似的东西。