11 октября 2012 г.

Почему не работает call_user_func_array

В документации по call_user_func_array есть два интересующих нас момента:
  •  "[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 );
?>

Комментариев нет:

Отправить комментарий