Seguro que muchos de vosotros os habéis topado con un aviso como el del título: Notice: Only variables should be passed by reference. Uno de los tantos avisos que podemos tener mientras trabajamos con PHP.
Es un notice, no pasa nada.
Sí , si pasa. Y más si trabajamos en producción. Este tipo de errores, han de subsanarse y no parchearse con un error_reporting(0); y que sea lo que dios quiera.
Curiosamente estaba trasteando un tutorial sobre uploader multiple de imágenes y me he topado con ese pequeño código que tanto me irritaba a los ojos durante el tutorial:
$ext = end((explode(".", $filename)));
Esto va a funcionar, pero va a tirar un notice como una catedral. Y todo por no leerse bien la documentación de PHP que no es precisamente escasa.
Dicha función , hace lo siguiente:
end — Set the internal pointer of an array to its last element
Y aún hay mas:
end (array &$array) : mixed
Y aún asi, nos avisa de:
The array. This array is passed by reference because it is modified by the function. This means you must pass it a real variable and not a function returning an array because only actual variables may be passed by reference.
Vamos que nos dice con toda las de la ley , que no podemos usar una función que retorne un array si no una variable que puede ser pasada por referencia.
Y como solventamos dicho error?.
Pues tan fácil como asignar una variable a la función explode() y luego pasar dicha variable a la función end().
$tmp = explode(".", $filename); $ext = end($tmp); //Le pasamos la variable, no la función.
Y con esto, ya tenemos el pequeño problema arreglado.
Saludos!.
Excelente!