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 | Введено. |