Wordpressでは、 add_actionは特定の Wordpress アクションへのフックを作成します。次に、アクション自体がトリガーされるポイントで関数が呼び出されます。
add_action
これは、指定された関数を呼び出すコードを関数自体から分離するディスパッチャとして機能するイベント ディスパッチャに似ています。イベント (アクション) がトリガーされると、ディスパッチャーは登録されているすべての関数を呼び出すことができます。
実装に関しては、一連の関数として PHP にネイティブに含まれているわけではありませんが、かなり簡単に作成できます。
編集
そのような実装の 1 つを次に示します。
<?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
.
最後に、適切なフレームワークを使用している場合、これは既に実装されているはずですが、この例がいかに簡単で便利であるかを示していることを願っています。