Начиная с версии PHP 5.0.5, а также 5.1, разработчики PHP усилили требования к коду. В частности, это касается работы функций, принимающих в качестве аргументов - ссылки на переменные, массивы и т.п.
Приведенный ниже код, нормально работающий на PHP 4.4, начиная с версии PHP 5.0.5 выдает сообщение об ошибке вида: Fatal error: Only variables can be passed by reference in....
function Foo(&$data) {
// do some code with $data
}
function Bar() {
return "Hello world";
}
echo Foo(Bar());
Теперь при вызове функции Foo(), требующей передачи ей ссылки на переменную (для непосредственной ее модификации в функции) с аргументом, являющимся другой функцией, PHP 5.0.5 отказывается выполнять этот код и выдает соответствующее сообщение об ошибке.
Для решения данной проблемы необходимо немного видоизменить код, вводя временную переменную. Правильный (и к тому же работающий на PHP 5.0.5, а также 5.1) вызов функции выглядит так:
function Foo(&$data) {
// do some code with $data
}
function Bar() {
return "Hello world";
}
$tmp_var = Bar();
echo Foo($tmp_var);