如果将数组传递给do_action_ref_array()
, 该数组的每个元素的值将作为单独的参数传递给回调。钥匙丢了。
如果将数组传递给do_action()
, 整个数组将作为单个参数传递给回调。钥匙完好无损。让我们看看
do_action()
和
do_action_ref_array()
在一个简单的插件中:
add_action( \'wp_footer\', \'action_diff_test\' );
add_action( \'diff_action\', \'diff_test_callback\', 10, 999 );
add_action( \'diff_action_ref_array\', \'diff_test_callback\', 10, 999 );
/**
* call test actions
*/
function action_diff_test()
{
$args = array (
\'foo\' => \'bar\',
\'hello\' => \'world\',
0 => 123
);
do_action( \'diff_action\', $args );
do_action_ref_array( \'diff_action_ref_array\', $args );
}
/**
* callback for test actions
*/
function diff_test_callback()
{
$args = func_get_args();
print current_filter() . \', \' . func_num_args() . \' arguments\';
?>
<pre><?php
print htmlspecialchars(
print_r( $args, TRUE ),
ENT_QUOTES,
\'utf-8\',
FALSE
);
?></pre>
<?php
}
结果:
diff_action, 1 arguments
Array
(
[0] => Array
(
[foo] => bar
[hello] => world
[0] => 123
)
)
diff_action_ref_array, 3 arguments
Array
(
[0] => bar
[1] => world
[2] => 123
)
do_action_ref_array()
是
introduced 2006 处理参数的步骤
passed by reference PHP 4更好。A.
review of the function 2011 已关闭为wontfix。但结论是不再在WordPress中使用新函数,因为在PHP 5中,您可以使用
do_action()
也2006年的问题现在已经不是问题了。
不使用do_action_ref_array()
在自定义挂钩中,但要学习如何阅读它。