call_user_fuck()

В callback-функции нельзя по человечески передать аргумент по ссылке.

function func($x, &$y) {
    $y = $x * 2;
}
 
$callback = 'func';
$x = 5;
 
call_user_func($callback, $x, &$y);
$callback($x, &$y);

Оба раза это сработает правильно, но оба раза вылетит Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration …. Да, сейчас я побегу модифицировать декларацию call_user_func() и runtime function name

Параметр allow_call_time_pass_reference нельзя выключить на время через ini_set(). Не помогает здесь и @call_user_func(...): предупреждение вываливается ни при вызове, а при подключении файла, спасёт только @require(...).

А если это библиотека для распространения, то запись в документации подключайте только с отключённым выводом ошибок не лучшая реклама. Единственный вариант — старый добрый eval() с извинениями и объяснениями в коде.

6 комментариев »

  • човак, а где ты это заюзал?
    дай пример

    epsyl, 7.06.2009, 23:05

  • Пример выше :)
    Реальный пример, где с этим столкнулся, будет сегодня-завтра

    vasa_c, 8.06.2009, 8:57

  • vasa_c, зачем так нервничать! в документации указан workaround через call_user_func_array:
    call_user_func_array($callback, array($x, &$y));

    http://ru.php.net/manual/en/function.call-user-func.php

    artoodetoo, 16.09.2009, 2:02

  • Это который с пометкой «You can use this instead before PHP 5.3»?

    vasa_c, 16.09.2009, 12:56

  • ога. а в 5.3 видимо всё будет гладко и восхитительно

    artoodetoo, 16.09.2009, 16:19

  • В качества параметра функций нельзя передавать ссылки

    call_user_func($callback, $x, &$y);
    call_user_func_array($callback, array($x, $y));

    ghost, 27.11.2009, 15:44

Leave a comment