Мы обычно используем ссылки, чтобы вернуть из функции "несколько" результатов. Лучше один раз увидеть. Предположим, мы пишем функцию для запроса данных к БД. Начнем с простого:
function query($sql){
...
return $data;
}
Вызов:
print_r ( query("Select * from test" ) );
Вроде ниче так, пока в таблице есть записи - мы знаем что если из функции что-то вернулось - запрос состоялся. А если пусто - это нет данных или произошла ошибка? Получается, возвращать надо TRUE (запрос состоялся)/FALSE, ну а то что нет данных - это еще не ошибка.. И тогда мы стали делать так (передавать из функции $data по ссылке):
function query($sql, &$data){
...
return $result;
}
// это позволяет вызывать запросы следующим образом:
if ( query('select * from test', $data) ){
// проверка и обработка $data
}
else{
// обработка ошибки
}