La respuesta corta es referencias de uso cuando se necesita la funcionalidad que proporcionan. No pienses en ellos en términos de uso de memoria o velocidad. Pasar por referencia siempre será más lento si la variable es de solo lectura.
Todo se pasa por valor, incluidos los objetos. Sin embargo, es el identificador del objeto que se pasa, por lo que a menudo las personas lo llaman por referencia erróneamente porque se ve así.
Entonces, ¿qué funcionalidad proporciona? Se le da la capacidad de modificar la variable en el ámbito global del script:
class Bar {}
$bar = new Bar();
function by_val($o) { $o = null; }
function by_ref(&$o) { $o = null; }
by_val($bar); // $bar is still non null
by_ref($bar); // $bar is now null
Así que si usted necesita tal funcionalidad (lo más a menudo no lo hace), a continuación, utilizar una referencia. De lo contrario, solo pasa por valor.
funciones que se ven así:
$foo = modify_me($foo);
veces son buenos candidatos para el paso por referencia, pero debe quedar absolutamente claro que la función modifica la aprobada en variable. (Y si tal función es útil, a menudo es porque realmente debería ser parte de una clase que modifica sus propios datos privados).
Solo una nota relacionada con C++: Las matrices pasadas a funciones son en realidad punteros, por lo que pasan una referencia para ellos es innecesario y en realidad no hace lo que crees que hace. Totalmente de acuerdo en la const embargo! – Aaron