Emplear use() en funciones anónimas

En algunos casos vemos, sobre todo en códigos PHP recientes, que la declaración “anónima” de una función se acompaña del empleo de use() para pasarle variables a la función. Un ejemplo sería el siguiente: $miFuncion = function() use ($nombre) {     echo “Hola, “.$nombre; } Esta sintaxis puede resultar un poco confuso si no estás familiarizado con él. Y, si te estás iniciando en el mundillo de los frameworks PHP lo vas a ver muy a menudo. Vamos a ver que es lo que hace, y cómo hay que usarla. En realidad, esto sería equivalente a lo siguiente: $miFuncion = function($nombre) {     echo “Hola, “.$nombre; } O, también a lo que aparece a continuación: $miFuncion = function() {     global $nombre;     echo “Hola, “.$nombre; } Lo único con lo que hay que tener cuidado es que, cuando emplees la primera sintaxis (la que recurre a use()) la variable o variables que emplees deberán estar declaradas, y asignadas, ANTES DE DECLARAR LA FUNCIÓN. Con las otras dos sintaxis (las de siempre, para entendernos), basta con que las variables empleadas estén declaradas antes de invocar la función. Por lo tanto, podemos decir que la sintaxis con use() …

Seguir leyendo

Poniendo MySQL en UTF-8

La codificación de contenidos cuando se desarrolla una aplicación que requiere el uso de bases de datos puede llegar a convertirse en una de las peores pesadillas de un desarrollador, sobre todo si es algo en lo que no has pensado desde las primeras fases iniciales previas al inicio del desarrollo. Motores de bases de datos tan populares y difundidos como MySQL pueden dar muchísimos problemas a la hora de grabar datos, de recuperarlos y de renderizarlos en vistas, si no tenemos en cuenta la codificación. La codificación de datos más adecuada en la mayor parte de los casos es UTF-8, ya que implementa todos los caracteres que se puedan usar en cualquier idioma, así como gran cantidad de guarismos que, sin pertenecer a un idioma específico, son de uso relativamente común, como signos matemáticos u otros. Para implementar otros caracteres extremadamente especiales hay otras codificaciones adecuadas, pero eso es tan poco habitual que ni lo vamos a comentar. El problema es que, cuando se crea una base de datos, tabla o campo, el motor de MySQL (dependiendo de la versión, y del entorno de desarrollo) tiende a emplear alguna codificación de tipo latin-n-xxxxxxxx o similar. De momento, parece irrelevante, …

Seguir leyendo

Uniendo tablas MySQL (I). Introducción.

Iniciamos aquí una pequeña serie de artículos dedicados a las consultas MySQL que afectan a dos o más tablas. Cuando, en una consulta, necesitamos recurrir a dos tablas, significa que ambas están relacionadas entre sí, en una relación de 1-m o de m-1. Cuando se recurre a consultas que implican más de dos tablas, puede tratarse de que alguna de ellas esté relacionada con las demás en relaciones del tipo mencionado, o bien que dos tablas estén relacionadas entre sí, en una relación de tipo m-n, a través de una tercera tabla intermedia. Además, podemos encontrarnos con la necesidad de construir consultas que impliquen relaciones “especiales”, bajo determinadas circunstancias, como veremos en esta serie. Procuraremos analizar las sintaxis adecuadas en los casos que se nos presenten, de modo que, cuando tengas necesidad de consultas de este tipo, puedas hacerlas del modo más óptimo posible. En estos artículos presentaremos la sintaxis MySQL. Esto significa que podría haber algunas diferencias si tu motor de base de datos SQL es otro (SQL Server, SQLite, etc). Optar por MySQL ha sido una decisión lógica, teniendo en cuenta que es el motor de bases de datos relacionales más empleado en Internet, con mucha diferencia y, …

Seguir leyendo

Uniendo tablas MySQL (II). Uniones externas.

En el artículo anterior aprendimos a relacionar entre sí tablas a través de un campo que implicaba una relación lógica. De este modo, aquellos registros de la primera tabla que no tenían correspondencia con un registro de la segunda eran, automáticamente, omitidos. En la mayor parte de los casos esto será lo que necesitemos. Sin embargo, no siempre es así. Hay ocasiones en que necesitamos obtener TODOS los registros de una tabla que cumplan determinada condición, tengan o no correspondencia con algún registro de otra tabla. De esto nos vamos a ocupar en este artículo sobre uniones “externas” (OUTER JOIN).

Uniendo tablas MySQL (III). Autocombinaciones.

Siguiendo con el tema de uniones de tablas, en este artículo vamos a ver un tema que, en el día a día del desarrollo de aplicaciones, se da con más frecuencia de la que parece: las autocombinaciones. En los artículos anteriores hemos conocido distintas formas de combinar datos de dos tablas, para obtener el resultado deseado. Aquí vamos a aprender como combinar datos de una tabla con datos procedentes de la misma tabla, que mantienen una relación estructural. Cómo siempre, lo veremos desarrollando un ejemplo, que podremos extrapolar a cualquier otra necesidad que nos surja en este terreno.

Uniendo tablas MySQL (y IV). Uniones con más de dos tablas.

Para finalizar con esta serie de artículos vamos a ver una situación muy habitual, que se da en muchísimos desarrollos. Se trata de relacionar datos de dos tablas, a través de una tercera tabla intermedia, que contiene las referencias a los elementos de cada una de las tablas principales, en la típica relación de “muchos a muchos”, también llamada de m-n. Es el caso en que cada elemento de la tabla A puede estar relacionado con uno o más elementos de la tabla B, y recíprocamente. De hecho, este es el caso más habitual cuando dos tablas se relacionan entre sí. También puede ser, conceptualmente, el más complejo de entender cuando uno se inicia en SQL. Este artículo nos enseñará cómo efectuar estas consultas.

Vistas en MySQL

En este artículo vamos a conocer qué son las vistas en MySQL y como pueden ayudarnos a hacer que nuestra aplicación web con base de datos funcione más rápido, mejorando la experiencia del usuario. Por decirlo brevemente, las vistas constituyen una herramienta muy apta para acelerar las consultas de selección (SELECT), es decir, aquellas que recuperan datos de una o más tablas. Están disponibles, con ligeras variaciones de sintaxis, en todas las implementaciones de SQL, aunque nosotros, por razones obvias, vamos a analizar su funcionamiento en MySQL.

Espacios de nombres en PHP (I). Introducción.

Todos hemos oído hablar alguna vez de los espacios de nombres, o namespaces (ns), en terminología anglosajona. Tal vez en otro contexto (cómo XML, por ejemplo). En PHP constituyen una valiosa herramienta de la que vamos a ocuparnos en estos artículos. En su definición más aceptada, son una forma de encapsular elementos (en el contexto de PHP, estamos hablando de constantes, funciones y clases). Esto nos facilita crear código reutilizable, permitiendo a otros desarrolladores implementar con facilidad nuestras librerías, evitando colisiones de nombres que pudieran surgir con sus propios elementos, y viceversa. Nosotros podemos implementar librerías de terceros, con la misma prerrogativa.

Espacios de nombres en PHP (II). Agrupando Namespaces.

En el artículo anterior nos introdujimos en el uso de los espacios de nombres, o namepaces (en muchos textos aparecen, abreviadamente, como ns). En este artículo vamos a ver como usar dos espacios de nombres diferentes en un mismo script. Antes de entrar en materia debo advertirte que lo que vamos a aprender en este artículo es una práctica que, aún siendo sintácticamente legal en PHP, se encuentra sumamente desaconsejada, en orden a tener un código limpio y reutilizable. En realidad, no existe ninguna razón clara para usar lo que vamos a ver aquí, y sí hay muchas para no usarlo. La más obvia es que nuestro código será más limpio y reutilizable cuanto más encapsulado esté. En efecto, si yo necesito emplear los elementos que se encuentran bajo un determinado espacio de nombres, no hay ninguna razón por la que deba cargar un script que incluya otros espacios de nombres cuyos elementos no voy a necesitar. A menudo, la diferencia entre encapsulación y sobrefragmentación del código es una línea muy delgada, pero el criterio que acabo de exponerte la define bastante bien. Y ahora, si las prácticas que vamos a ver están desaconsejadas ¿por qué hablar de ellas? Con …

Seguir leyendo

Espacios de nombres en PHP (y III). Jerarquía de namespaces.

En el primer artículo de esta serie explicábamos que los espacios de nombres son una forma de clasificar elementos equivalente, en cuanto al concepto, a lo que son los directorios para los ficheros. De este modo podemos tener elementos, como ya hemos aprendido, con el mismo nombre, en diferentes espacios de nombres. A la hora de referenciar un elemento, lo hacemos precediéndole, en su caso, del espacio de nombres al que dicho elemento pertenece. Al igual que ocurre con los directorios, podemos especificar una ruta de acceso de tres modos: Sin especificar un espacio de nombres. En ese caso se entiende que el elemento referenciado se encuentra en el espacio de nombres actual. Es lo mismo que no usar espacio de nombres. Esto se conoce como nombre sin cualificar. Es el equivalente, cunado hablamos de ficheros y directorios a llamar a un fichero sólo por su nombre, asumiendo que está en el mismo directorio en el que estamos trabajando. Especificando un espacio de nombres, la barra invertida, y el elemento al que queremos referirnos. Esto se conoce como nombre cualificado. El espacio de nombres que usamos “depende” del espacio de nombres actual. Es el equivalente a usar una ruta relativa …

Seguir leyendo