将单个对象数组作为数组传递给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);
答案 0 :(得分:0)
一个好问题,直到我尝试了一下,我才意识到这一点,但这是预期的和故意的行为(仅适用于将对象作为唯一项的数组),如{{3 }} 而且,如果您查看do_action()的代码,也会看到相同的内容。
偶然地,当您尝试在数组上设置属性时,您的示例代码将引发错误:
PHP Warning: Attempt to assign property 'name' of non-object in object-test.php
另外,请确保始终在do_action之前执行add_action,以使“挂钩”功能生效。