我正计划构建一个包含模块化功能的简单应用程序,并且正计划使用与WordPress使用的类似技术,即钩子!
我做了一些挖掘工作,没有找到合适的答案或找到了答案,但是它太混乱了,所以有人可以向我解释 hooks功能如何工作以及如何使用核心PHP实现它! >
我的计划是创建一个主页并将模块(如WordPress插件)添加到主页,我做了一个基本的WordPress插件,并遇到了诸如add_action
,has_action
,{{ 1}}等,还有一些过滤器,例如remove_action
,add_filter
,has_filter
等
我们如何使用核心PHP从头实现这些功能?
如果有任何参考代码,则可以使用博客或简单的代码来实现基本的hello world应用程序!
我只是在尝试学习新事物,请帮助我将此功能添加到主页,并尽可能向我解释此过程!谢谢。
答案 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');