Laravel Aprendiz

Método isset sobre Collections

Al actualizar a Laravel 8 debemos tener en cuenta que el método isset aplicado sobre colecciones funciona ahora de manera distinta. Veamos con ejemplos en qué consiste este cambio.

Esta lección no cuenta con recursos adicionales.

Si crees que hace falta algo, o necesitas ayuda, puedes publicar una pregunta en el foro.

La primera sección de la guía nos habla acerca de collections. Nos habla sobre las colecciones de Laravel. De manera específica, del método is set. Nos dice que para guardar consistencia con relación al comportamiento típico de PHP, el método offset exists de collection ha sido actualizado para que haga uso de is set en vez de array key exists. Esto puede afectarnos si es que nosotros tenemos colecciones que tienen elementos con valor null. Aquí tenemos un ejemplo para que se comprenda mejor. En esta línea se está creando una colección de Laravel. ¿Cómo se crea una colección en Laravel? Usamos el helper collect y le pasamos un argumento que es un arreglo con los elementos que queremos que contenga la colección. En este caso se está creando una colección usando el helper collect, y la lista de elementos que estamos pasando es un arreglo que tiene un solo elemento, con el valor de null, en este caso. Esta colección se crea y se almacena en esta variable collection. Entonces aquí tenemos Laravel 7 y Laravel 8. Si nosotros inspeccionamos el elemento 0 de esta colección usando "is set", para Laravel 7 esto nos daba el valor de verdadero. Para Laravel 8, si usamos "is set" sobre el elemento 0 eso nos da valor false. ¿Por qué el comportamiento cambia? Lo que ocurre es que cuando se aplica "is set" sobre el elemento de una colección, Laravel implementaba su método offset exist de tal manera que usaba la función array_key_exists. Cuando se usa array_key_exists básicamente se está preguntando a esta colección si existe un elemento en la posición 0. Entonces cuando se ejecutaba "is set" sobre un elemento, si el elemento existía esto devolvía verdadero. Por ejemplo aquí la colección se ha creado con un elemento, ese elemento tiene valor null. Entonces, anteriormente la implementación decía, ¿existe un elemento en la posición cero? Como si existe, devolvía en verdadero. Ahora en cambio, en Laravel 8, cuando se ejecuta is set sobre un elemento de una colección, Laravel por detrás en vez de usar array_key_exists usa también is set. Entonces cuando se evalúa is set de colección cero, básicamente se está evaluando is set sobre el elemento cero que viene a ser null. Entonces, is set de null devuelve falso y esa es la respuesta final que esta expresión nos devuelve. De hecho antes, de que nosotros actualicemos vamos a confirmar este comportamiento. Vamos a imprimir nuestra versión de Laravel. Como aquí se muestra estamos usando Laravel 7.30. Ahora vamos a iniciar la consola interactiva de tinker y vamos a hacer justamente la prueba que hemos visto detrás. Vamos a crear una colección sobre una variable c usando el helper collect, y vamos a definir aquí un arreglo con un único elemento. Acabamos de crear una colección en Laravel. Ahora vamos a ver qué ocurre si llamamos a is set, y le pasamos aquí la colección y preguntamos por el elemento 0. En Laravel 7 el resultado es true. ¿Por qué? Porque si existe un elemento en la posición 0 por eso es que obtenemos verdadero. Vamos a salir y ahora vamos a ejecutar composer update, para que los cambios que hemos puesto en nuestro archivo composer.json tengan efecto Entonces vamos a actualizar nuestro proyecto para que la dependencia Laravel framework use como mínimo la versión 8 en vez de una versión 7, que es lo que estábamos usando anteriormente. No olvidemos de guardar aquí cambios. Luego de guardar cambios ejecutamos el comando composer update, para que las nuevas versiones que estamos solicitando sean descargadas. Por ejemplo vamos a descargar ahora Laravel framework, en su versión 8, en vez de en su versión 7, que es lo que antes teníamos. Por aquí ya se está realizando la actualización, antes usábamos la versión 7.30, y ahora estamos solicitando la versión 8.47. Muy bien, una vez que hemos terminado de actualizar las dependencias, vamos a iniciar nuevamente la consola interactiva de tinker. Vamos a crear una colección c, y vamos a preguntar por el elemento 0 de esta colección usando la función "is set". Como vemos el resultado es false. ¿Cómo afecta esto a nuestro proyecto? Bueno, si nosotros hemos estado usando la función Isset sobre elementos de colecciones, debemos revisar con cuidado que este nuevo comportamiento no vaya a afectar negativamente a nuestro proyecto. Por ejemplo, en este caso, la función Isset sí se ha usado en este proyecto, pero no sobre colecciones, sino sobre arreglos de PHP. Aquí se ha usado sobre arreglos, no sobre colecciones. También se ha usado directamente sobre variables, pero en ningún caso estamos usando Isset sobre colecciones, así que en este caso no hay que hacer ningún cambio al respecto.

¿Tienes dudas?

Publicar pregunta

¡Comparte conocimiento!

Volver al índice

Regístrate

Inicia sesión para llevar un control de tu progreso.

Capítulos




















































































































116























138











148













160






















181













193

Método isset sobre Collections






199

























































Espera un momento ...

¿Te gustaría llevar mi curso de Laravel, gratis?

Sólo debes ingresar tus datos: