Ich habe Probleme, meinen Kopf um diese beiden Funktionen zu wickeln. Ich verstehe, do_action()
aber ich sehe nicht klar, wann do_action_ref_array()
es nützlich wäre. Könnten wir nicht auch ein Array übergeben do_action()
?
Ich habe Probleme, meinen Kopf um diese beiden Funktionen zu wickeln. Ich verstehe, do_action()
aber ich sehe nicht klar, wann do_action_ref_array()
es nützlich wäre. Könnten wir nicht auch ein Array übergeben do_action()
?
Wenn Sie ein Array an übergeben do_action_ref_array()
, wird der Wert jedes Elements dieses Arrays als separater Parameter an den Rückruf übergeben. Die Schlüssel sind verloren.
Wenn Sie ein Array an übergeben do_action()
, wird das gesamte Array als ein einziger Parameter an den Rückruf übergeben. Die Schlüssel bleiben intakt.
Schauen wir uns die Unterschiede zwischen do_action()
und do_action_ref_array()
in einem einfachen Plugin an:
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
}
Ergebnis:
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()
wurde 2006 eingeführt , um Parameter, die als Referenz übergeben wurden , in PHP 4 besser zu behandeln. Eine Überprüfung der Funktion 2011 wurde als wontfix abgeschlossen . Die Schlussfolgerung war jedoch, nicht mehr für neue Funktionen in WordPress zu verwenden, da Sie dies in PHP 5 auch tun können do_action()
. Das Problem von 2006 ist heutzutage kein Problem.
Verwenden Sie es nicht do_action_ref_array()
in Ihren benutzerdefinierten Hooks, sondern lernen Sie, wie man es liest.