Do_action是否可能会产生意外的结果?

时间:2021-07-17 作者:shenkwen

我想了解钩子系统。根据wordpress codex,do_action 执行所有挂钩函数。所以

do_action(\'hook_name\',$arg1,$arg2,$arg3)
会将所有参数传递给所有钩住的函数,对吗?我认为不同的插件开发人员都可以将他们的功能与特定的操作挂钩。所以当一个开发者打电话给do_action 对于用于其函数的arg,这些arg实际上会传递给其他开发人员编写的其他函数,这难道不会导致问题吗?

举个很简单的例子

function f1($a){
    if ($a) {
        die();
    }
    ...
}

function f2($a,$b,$c){
    if (!$a){
        die();
    }
    ....
}

//developer1
add_action(\'action\',\'f1\',10,1);

// develper2
add_action(\'action\',\'f1\',10,3);

do_action(\'action\',TRUE,$b); //developer2 call action

1 个回复
SO网友:Tom J Nowell

在所描述的场景中,f1 添加了,并指出它只接受一个参数,因此只提供了一个参数(第一个)。因此,永远不会使用多个参数调用f1。

但是,如果你打电话,可能会出错add_action 并声明f1 可以接收2个参数,然后将使用2个参数调用它,即使只有1个参数,也会生成PHP警告。

如果传递一个参数,情况也是如此,f2 将生成PHP警告,因为它需要多个参数,但没有提供任何参数。默认参数在这里很有用。

然而,这是其他开发人员使用的问题add_action 不正确。只要你在记录你的行为,并且在触发它们的方式上保持一致,你就不应该担心这一点。

相关推荐

OOP development and hooks

我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private