В документации по call_user_func_array есть два интересующих нас момента:
Пример из Joomla 1.5.7. Тут решается двумя разными способами: 1) делаем все элементы массива ссылками
или сам массив $args передаем по ссылке
- "[call_user_func_array] Возвращает результат функции или FALSE в случае ошибки."
- "Передача параметра функции по значению при ожидаемой передаче по ссылке вызовет предупреждение и заставит call_user_func() вернуть FALSE..."
На практике PHP (5.3.4) таки выдает предупреждение ("PHP Warning: Parameter 4 to JHTMLMenu::treerecurse() expected to be a reference, value given in /htdocs/libraries/joomla/html/html.php on line 87"), callback-функция действительно не выполняется, но call_user_func_array возвращает NULL, вместо обещанного FALSE. Ради справедливости отмечу, что тут мы получаем предупреждение, а не ошибку.
Пример из Joomla 1.5.7. Тут решается двумя разными способами: 1) делаем все элементы массива ссылками
<?php if (strnatcmp(phpversion(),'5.3') >= 0) { foreach($args as $key => $value) { $refs[$key] = &$args[$key]; } } ?>
или сам массив $args передаем по ссылке
<?php call_user_func_array( array( $className, $func ), &$args ); ?>
Комментариев нет:
Отправить комментарий