По поводу ссылок. Насколько я знаю, в php все типы передаются почти как ссылки, а клонируется только при модификации данных. Допустим у нас есть большой массив с кучей данных. Мы передаём его в функцию обычным способом (не по ссылке), чтобы выбрать из него только уникальные значения в цикле и вернуть их. При этом этот огромный массив в памяти не создаст копию себя. Переменная копируется в памяти только если происходит модификация данных. То есть если наша функция по ходу работы начнёт вносить в этот большой массив какие-то изменения, тогда создастся его копия в памяти.
Уже сейчас попытка передать переменную по ссылке ololo(&$a); вызывает ошибку. И это правильно. Потому что:
1) Если мы хотим передать переменную по ссылке внутрь функции, чтобы не делать копию данных в памяти, то в этом нет смысла, так как копия данных итак не создастся, если тело функции написано правильно и не модифицирует переданный массив (а если и модифицирует, то вероятно затем вернёт его, в любом случае автор функции сделал это по каким-то убеждениям, быдлокодеров не в счёт).
2) Мы можем (и не должны с точки зрения инкапсуляции) не знать как устроена функция внутри, и что она делает с получаемыми данными. Если функция не объявлена как function ololo(&$a){, то нефиг в неё и пытаться передавать переменную по ссылке, иначе она может нам изменить данные в ней. А вдруг переменную мы будет после вызова функции использовать где-то ещё?