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

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

El servidor de correo electrónico

Cuando vamos a escribir código PHP (o, en general, con cualquier tecnología de servidor), necesitamos disponer de un servidor de correo electrónico, para probar aquellos scripts que vayan a enviar correos a los usuarios. Tenemos dos alternativas. Si tenemos un alojamiento contratado con algún proveedor de servicios, estos ya incluyen tal prestación, con lo que lo único que tenemos que hacer es crear en el servidor remoto un directorio para pruebas y, dentro de este, subir los scripts que envíen correos electrónicos. Para mi, esta es la mejor opción, ya que nos permite probar los scripts en un entorno de producción real.

Almacenar imágenes en base de datos con PHP

Almacenar imágenes en el servidor de producción con PHP es muy sencillo. Basta subir un fichero y, tras unas comprobaciones rutinarias, almacenarlo en el directorio deseado con move_uploaded_file(). Si nunca has usado esta técnica, puedes revisar este post. En este artículo veremos cómo almacenar una imagen en forma de datos binarios en una tabla de una base de datos de MySQL.

Manejo de fechas en PHP

Abrimos esta serie de artículos de “Trucos y Recursos para PHP” con un tema delicado de gestionar, no sólo en este lenguaje en particular, sino en cualquier otro. De hecho, PHP es uno de los lenguajes en el que las fechas son más manejables, ya que implementa funcionalidades muy específicas y bien concebidas. Los datos de tipo fecha, y las operaciones que se pueden necesitar sobre ellos son, sin duda, una pequeña “bete noire” para muchos programadores. Desde aquí voy a transmitiros mi experiencia con estos datos, en el deseo de que os ahorre algún dolorcillo de cocorota.

Insertar elementos en medio de una matriz en PHP

PHP nos ofrece varias posibilidades para agregar elementos a una matriz. Desafortunadamente, con las funciones nativas del lenguaje sólo podemos efectuar la inserción de un elemento al principio o al final de la matriz, pero no en una posición específica “en medio”. No es una necesidad que se plantee muy a menudo, porque, dada una matriz cualquiera, sea unidimensional o bidimensional, podemos ordenarla por varios criterios. Sin embargo, cuando nos surge esta necesidad concreta, el lenguaje no nos ofrece ninguna solución clara. Recientemente me surgió esta situación en un proyecto en el que estoy trabajando actualmente.

Ordenar matrices multidimensionales en PHP

En un tutorial de PHP vimos cómo ordenar matrices. En este artículo vamos a conocer un recurso que PHP nos ofrece cuando se trata de ordenar matrices multidimensionales, manteniendo, por supuesto, la integridad de los datos originales. ORDENAR MATRICES MULTIDIMENSIONALES Este es un tema peliagudo en muchos lenguajes de programación. Se trata de ordenar los elementos de una matriz bidimensional (que, cómo ya sabes, son, a su vez, matrices unidimensionales), por un criterio. Por ejemplo, en las matrices que hemos visto de amigos, podemos querer ordenarlas por el nombre. Afortunadamente, PHP cuenta con la función array_multisort(), concebida para hacer, precisamente, eso. Vamos a ver cómo, en un ejemplo que hemos llamado ordenarMulti.php (la imaginación al poder 😀 ).

Lo que queremos hacer es ordenar la matriz de amigos por el nombre, de modo que, por supuesto, se mantenga la relación del nombre con el resto de los datos, es decir, que se mantenga lo que se conoce cómo la integridad de datos. Para ello creamos una matriz auxiliar que, en nuestro ejemplo, hemos llamado $nombre. El proceso que aparece con la instrucción foreach probablemente no lo entiendas totalmente ahora, hasta que no publiquemos el artículo sobre estructuras de control …

Seguir leyendo

Rotación automática de imágenes

A menudo nos encontramos con que tenemos que preparar un formulario que le permita al usuario subir imágenes a nuestro sitio. Estas imágenes deberán quedar a disposición nuestra, o del propio usuario que las ha subido, o de otros usuarios de nuestra web para visualizarlas. Supongamos, por ejemplo, que creamos un portal inmobiliario donde el usuario sube imágenes de un inmueble que desea vender. El problema aparece cuando esas imágenes han sido tomadas con una cámara digital, teléfono móvil, tablet, etc. Estos dispositivos incorporan a dichas imágenes lo que se conoce cómo información Exif. Se trata de un conjunto de metadatos que no se aprecian al visualizar la fotografía. Sin embargo, uno de los metadatos que se incluyen especifica una orientación concreta para la imagen. El resultado es que el usuario sube una imagen que concidera que es correcta y nuestra página la muestra rotada 90, 180 0 270 grados. Sin embargo, si visualizamos la imagen en nuestro sistema operativo, o con un programa de visiualización de imágenes, se muestra correctamente. ¿Que hacer en este caso?