WordPress add_action ошибка? - PullRequest
0 голосов
/ 30 мая 2019

Когда один массив объектов передается как массив в do_action, add_action будет видеть его как объект, а не как массив.Это ошибка?

/* Correct if $order is not object*/
$orders = array();
$orders[] = 'abc';

add_action('action123', 'func123');
function func123($orders){
    //$orders will be array here (CORRECT)
}

do_action( 'action123', $orders); 


/* BUG: if $orders is an object */
$orders = array();
$orders[]=new stdClass();

add_action('action123', 'func123');
function func123($orders){
    //$orders will be non-array here (BUG?)
}

do_action( 'action123', $orders); 

1 Ответ

0 голосов
/ 30 мая 2019

Отличный вопрос, я сам этого не осознавал, пока не попробовал, но это ожидаемое и преднамеренное поведение (только для массива, в котором объект является единственным элементом), как описано в комментариях на https://developer.wordpress.org/reference/functions/do_action/ И если вы посмотрите на код do_action (), вы увидите то же самое.

Кстати, ваш пример кода выдает ошибку при попытке установить свойство в массиве:

PHP Warning:  Attempt to assign property 'name' of non-object in object-test.php

Кроме того, убедитесь, что вы всегда добавляете add_action до do_action для того, чтобы «зацепленная» функция имела какой-либо эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...