В 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()
с извинениями и объяснениями в коде.
човак, а где ты это заюзал?
дай пример
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