Hola, no se si has escuchado hablar de los punteros en C++.
Esto es algo parecido.
& en las variables sirve para hacer referencia a otra. Es como tener dos cosas con el mismo nombre.
Vamos a algo mas teorico: Sabemos que lo que guardas en variables se guarda en la memoria RAM del servidor, y así el script lo tiene siempre en memoria para usarla. ¿Eso lo sabías no? Cuanta mas variables, mas memoria RAM consume. Es decir, si yo tengo $var = "hola" en un script, la cadena "Hola" se guarda en la memoria RAM.
Cada parte de la memoria RAM tiene una identificacion, una posición. Imaginemos que cuando tu haces:
$var = "Hola"
La cadena "Hola" se guarda en la posición de memoria 0x0000001, la primera posición. Por lo tanto, teoricamente, lo que la variable $var esta guardando no es la cadena "Hola", lo que la variable $var guarda es la posición de memoria donde esta esa información.
Para que cuando tu hagas:
$var = "Hola de nuevo";
Lo que le dice al ordenador es:
"Escucha, en la posición de memoria 0x0000001 hay una información, pero ya no es útil, ahora quiero que en esa posición de memoria guardes la cadena 'Hola de nuevo'"
Partiendo de eso, de que las variables guardan posiciones de memoria y no información, es fácil saber que hace el cáracter &.
Simplemente se refiere a la posición en la memoria.
Por lo tanto, si tu haces:
$a = "hola";
$b = &$a;
$a = "adios";
echo $b;
Lo que saldra en pantalla es "adios", ya que ahora $a y $b señalan a la misma posición de memoria, y por lo tanto a la misma cosa.
Utilidad: la que tu quieras darle, desde llamar a la misma variable con dos nombres hasta crear funciones del tipo que tu has puesto en tu ultimo mensaje, no se me ocurre ninguna mas ahora mismo.
Saludos!