フック システムを作成するための検索で、wordpress が非常に良い例であることがわかり、それと関数呼び出しを模倣しようとしていadd_action()
ます。
ただし、ワードプレスでは、関数のシグネチャは次のとおりです。 do_action()
add_action( $tag, $function_to_add, $priority, $accepted_args );
$accepted_args
適切に発生させるには、パラメーターを渡す必要があります (デフォルトは 1) do_action()
。
私のクラスメソッドでは、なぜパラメータを$accepted_args
渡す必要があるのか わかりません:
public function addAction($tag, $callback, $priority = 10)
{
if (empty($tag) || !is_callable($callback)) {
return $this;
}
if (!$this->getActionsMap()->contains($tag)) {
$this->getActionsMap()->add($tag, new CList());
}
$this->getActionsMap()->itemAt($tag)->add(array(
'callback' => $callback,
'priority' => (int)$priority,
));
return $this;
}
public function doAction($tag, $arg = null)
{
if (!$this->getActionsMap()->contains($tag)) {
return $this;
}
$actions = $this->getActionsMap()->itemAt($tag)->toArray();
$sort = array();
foreach ($actions as $action) {
$sort[] = (int)$action['priority'];
}
array_multisort($sort, $actions);
$args = array_slice(func_get_args(), 2);
array_unshift($args, $arg);
foreach ($actions as $action) {
call_user_func_array($action['callback'], $args);
}
return $this;
}
だから私は疑問に思っています、そのパラメータが必要な本当の理由はありますか? それとも、ワードプレスのレガシーコードが原因ですか?