Las variables de nombre variable o variables variables, valga la redundancia son muy útiles a la hora de ahorrar programación ya que permite generar nombres de variables dinamicamente sobre todo en bucles y funciones.

La forma normal de crear una variables es $x=1

Pero que ocurre si tenemos que crear un bucle donde debemos asignar valores a $x1, $x2, $x3…. no sería buena idea asignar una por una, si estamos dentro de un bucle sería algo como:

1
2
3
foreach ($arr as &$value) {
   ${'x'.$i} = "valor de variable";
}

Lo mismo sirve también para usar los valores almacenados en una variable.