在 Wordpress中add_action创建一个特定的 Wordpress 动作的钩子。然后在动作触发自身的某个点调用该函数。
这类似于事件调度器,它add_action
充当调度器,将调用给定函数的代码与函数本身分离。当一个事件(动作)被触发时,调度器可以调用所有注册的函数。
至于实现,它在 PHP 中本身并没有作为一组函数找到,但可以相当容易地创建它。
编辑
这是一个这样的实现:
<?php
class Dispatcher {
// Event ID to callback functions array
private $callbacks = array();
function subscribe($event_id, $callback) {
if (!isset($this->callbacks[$event_id])) {
$this->callbacks[$event_id] = array();
}
$this->callbacks[$event_id][] = $callback;
var_dump($this->callbacks);
}
function publish($event_id, $obj = NULL) {
$callbacks = $this->callbacks[$event_id];
if ($callbacks) {
foreach ($callbacks as $callback) {
call_user_func($callback, $obj);
}
}
}
}
// This object would be shared where appropriate (hopefully you can avoid a global object!)
$dispatcher = new Dispatcher();
// Your code
function receiver($obj) {
echo "Receiver got " . $obj;
}
$dispatcher->subscribe('test-event', 'receiver');
// Somewhere else, possibly in someone else's code in a different class
$dispatcher->publish('test-event', 123);
?>
输出:
array(1) {
["test-event"]=>
array(1) {
[0]=>
string(8) "receiver"
}
}
Receiver got 123
第一个数组仅用于了解$callbacks
存储的内容。每当“test-event”事件发布时,所有注册的回调函数都会被执行。
如果这是 Wordpress,add_action
将subscribe
在您自己的代码中,并且publish
将do_action
在 Wordpress 自己的代码中调用。
对于这个简单的示例,我允许在publish
.
最后,如果你正在使用一个体面的框架,这肯定已经在其中的某个地方实现了,但希望这个示例显示它是多么简单和有用。