WordPress 中 do_action() 和 do_action_ref_array() 区别

2023-04-15 10:18:13 浏览数 (2)

WordPress 中 do_action()do_action_ref_array() 区别,其实就是 PHP 中 call_user_func 函数 和 call_user_func_array 函数的区别。

它们的第一个参数都是回调函数,do_action() 还可以有多个参数,它们都是回调函数的参数,do_action_ref_array() 只有两个参数,第二个参数是要被传入回调函数的数组

  • 如果传递一个数组给 do_action_ref_array(),数组的每个元素的值都会当做一个参数传递给回调函数,数组的 key 回调掉。
  • 如果传递一个数组给 do_action(),整个数组会当做一个参数传递给回调函数,数字的 key 还会保留住。

比如有个如下的回调函数:

代码语言:javascript复制
function test_callback(){
	$args	= func_get_args();
	$num	= func_num_args();
	echo $num."个参数:";
	echo "

<pre>";
	print_r($args);
	echo "</pre>
";
}

然后我们分别使用 do_action() 函数 和 do_action_ref_array() 函数进行回调:

代码语言:javascript复制
$args = array (
	'foo'	=> 'bar',
	'hello'	=> 'world',
	0	=> 123
);

do_action('test_callback', $args);
do_action_ref_array('test_callback', $args);

最后输出结果:

代码语言:javascript复制
1 个参数:
Array
(
    [0] => Array
        (
            [foo] => bar
            [hello] => world
            [0] => 123
        )
)

3个参数:
Array
(
    [0] => bar
    [1] => world
    [2] => 123
)

0 人点赞