do_action_ref_array()
Створює подію (хук), на яку потім можна прикріпити PHP функції. Аргументи передаються як масиву.
Ця функція ідентична do_action() . Різниця в тому, що аргументи хука вказуються як масив. Це дозволяє передати просту змінну за посиланням (див. приклад 1).
Також ця функція може бути корисною, коли ми заздалегідь не знаємо, яка функція буде викликана і скільки в неї параметрів. Використовуючи цей хук, ми дамо можливість розробнику, який використовує самому вказати скільки параметрів може отримати функція прикріплена до хука. приклад :
Хуків немає.
Повертає
null. Нічого
Використання
do_action_ref_array ($ tag, $ arg);
- $tag
(рядок) (обов’язковий) - Назва хука, який буде вішатися функції через функцію add_action().
- $arg
(масив) (обов’язковий) - Параметри передаються функції, яка чіплятиметься на хук.
Приклади
#1 Різниця з do_action()
do_action( 'my_action', 'arg_1', true, 'foo', 'arg_4'); // це теж саме що $args = ['arg_1', true, 'foo', 'arg_4']; do_action_ref_array( 'my_action', $args);
#2 Приклад створення хука з передачею параметра посилання:
Можна вказати посилання на елемент масиву і вказати, що змінні коллбек функції також очікують посилання. Тепер, при зміні елемента масиву в колббек функції, зміниться і значення цього елемента за межами видимості функції.
// додамо коллбек функцію до хука
add_action( 'myhook', 'myhook_func');
function myhook_func( & $num ){
$num = 2; // змінюємо змінну за посиланням
}
$num = 1;
// виклик хука
do_action_ref_array( 'myhook', array( & $num ) );
echo $num; //> 2#3 Приклад створення хука з передачею об’єкта за посиланням:
Якщо масив містить об’єкт, то ніяких посилань передавати не потрібно, об’єкт і так завжди передається за посиланням:
// додамо коллбек функцію до хука
add_action( 'my_action', 'my_callback');
function my_callback( $my_object ) {
$my_object->prop += 2; // додамо 2
}
// Створимо об'єкт
$my_object = New stdClass();
$my_object->prop = 1;
// запускаємо хук
do_action_ref_array( 'my_action', array( $my_object ) );
// бачимо, що об'єкт змінився
var_dump( $my_object->prop ); // int(3)Оскільки об’єкт передається за посиланням автоматично, у цьому випадку ми можемо використовувати стандартну функцію do_action() замість do_action_ref_array():
do_action( 'my_action', $ my_object ); // бачимо, що об'єкт змінився var_dump( $my_object->prop ); //> int(5)
#4 Передача безлічі параметрів {#multi-params}
add_action( 'my_action', 'my_callback', 10, 4);
function my_callback( $arg1 = '', $arg2 = '', $arg3 = '', $arg4 = '' ) {
print_r(func_get_args());
}
$args = ['one', 'two', 'tree', 'four'];
do_action( 'my_action', $args[0], $args[1] );
/*
Array
(
[0] => один
[1] => two
)
*/
do_action_ref_array( 'my_action', $args);
/*
Array
(
[0] => один
[1] => two
[2] => tree
[3] => four
)
*/
// c PHP 5.6 можна зробити так:
do_action( 'my_action', ...$args );
/*
Array
(
[0] => один
[1] => two
[2] => tree
[3] => four
)
*/
нотатки
- Дивіться: (hook_name) supplied using an array.
- Global. WP_Hook[]. $wp_filter Stores all of the filters and actions.
- Global. int[]. $wp_actions Stores number of times each action був triggered.
- Global. Рядок[]. $wp_current_filter Stores список поточних filtrів з поточним одним останнім.
список змін
| З версії 2.1.0 | Введено. |