Notice: Only variables should be passed by reference usando la función end de PHP.

Tiempo de lectura estimado: < 1 minuto

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!.

1 comentario en «Notice: Only variables should be passed by reference usando la función end de PHP.»

Deja un comentario

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar