1

フック システムを作成するための検索で、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;
}

だから私は疑問に思っています、そのパラメータが必要な本当の理由はありますか? それとも、ワードプレスのレガシーコードが原因ですか?

4

0 に答える 0