Uso de espacios de nombres y carga automática en los complementos de WordPress, Parte 3

En este tutorial, vamos a tomar un descanso de escribir código y veremos qué son los espacios de nombres y los autocargadores de PHP, cómo funcionan y por qué son beneficiosos. Luego nos prepararemos para concluir esta serie implementándolas en código..

Si no está al día con todo lo que hemos cubierto en la serie hasta este momento, le recomiendo que regrese y revise lo que hemos cubierto hasta ahora. Como mínimo, revise el artículo anterior, ya que sentará las bases de lo que hablaremos en los próximos dos artículos..

Ahora que estás atrapado, eres consciente del complemento en el que hemos estado trabajando, qué hace y cómo funciona. Además, debe tener configurado un entorno de desarrollo local que le permita trabajar con el código fuente. Si no, aquí tienes un resumen rápido de todo lo que necesitas:

  • Un entorno de desarrollo local que incluye PHP 5.6.20, el servidor web Apache y un servidor de base de datos MySQL.
  • Un directorio del cual WordPress 4.6 está siendo alojado..
  • Un editor de texto o IDE de su elección con el que se sienta cómodo al escribir un complemento.
  • Un conocimiento práctico de la API del complemento de WordPress.

Suponiendo que tenga todo eso instalado, configurado y listo para la versión más reciente del complemento, entonces estamos listos para reanudar nuestra discusión sobre espacios de nombres, carga automática y complementos de WordPress.

En espacios de nombres y carga automática

Para aquellos que han trabajado en otros lenguajes de programación modernos, puede estar familiarizado con el concepto de espacios de nombres. Pero incluso si has trabajado con PHP, no es probable que los hayas visto mucho, al menos en el contexto de WordPress..

Para aquellos de ustedes que no tienen oído hablar de ellos o quién tener escuchado de ellos pero no los he usado, de eso trata este artículo en particular. Específicamente, vamos a hablar sobre los espacios de nombres y la carga automática y luego, en el siguiente tutorial, veremos cómo encaja todo.

Es decir, tomaremos el trabajo que hemos hecho con nuestro complemento hasta el momento y lo actualizaremos para que use espacios de nombres y carga automática. Esto le dará una comprensión práctica de los conceptos, así como algunas nuevas herramientas para agregar a su repertorio de desarrollo para cuando trabaje en su próximo proyecto..

¿Qué son los espacios de nombres?

Al igual que con la mayoría de mis tutoriales, me gusta dar una definición formal y luego dividirla en términos más conversacionales. El manual de PHP define espacios de nombres como este:

En la definición más amplia, los espacios de nombres son una forma de encapsular elementos.. 

Eso no necesariamente nos ayuda mucho, ¿verdad? Se podría argumentar que las clases hacen lo mismo, ya que los atributos y las funciones pueden generalizarse como elementos. Pero el manual continúa:

Los espacios de nombres PHP proporcionan una forma de agrupar clases, interfaces, funciones y constantes relacionadas.

Eso es un poco más claro, ¿verdad? Esto significa que cuando tenemos un grupo de clases relacionadas, es posible que las agrupemos en el mismo directorio o directorios similares en el sistema de archivos, pero no hay forma de saberlo mirando el código.

Los espacios de nombres nos dan la capacidad de hacer eso.

Piénsalo de esta manera: imagina que tienes un conjunto de funciones relacionadas con el trabajo con CSV.. 

  • Quizás tenga una clase que sea responsable de leer un archivo CSV, analizar los contenidos y leer los contenidos en una matriz. 
  • Entonces tienes una clase que es responsable de tomar esa matriz y escribir datos en la base de datos según lo que contiene la matriz. 
  • Después de eso, hay una clase responsable de leer esas opciones cuando un objeto de terceros u otra área en el código necesita leer los datos que se leyeron, analizaron y guardaron antes en la ejecución del proyecto..

Toda esta funcionalidad debe abarcar varias clases. Dependiendo de cómo sea el código orientado a objetos de su solución, también puede tener un conjunto de interfaces que implementan sus clases. Además, las clases pueden organizarse en un / csv Directorio pero desglosado aún más en sus propios subdirectorios. 

  • /leer
  • /escribir

Tal vez optaría por organizar la estructura de manera un poco diferente, pero para mantener la discusión lo más simple posible, pensé que esto tendría sentido. Así que tal vez la (s) interfaz (es) de clase residirían en la raíz del / csv directorio, el lector residiría en el /leer directorio, y las clases responsables de escribir los datos en la base de datos residirían en el /escribir directorio.

Nada de lo que he dicho hasta ahora es extraordinario en términos de cómo podemos organizar nuestros archivos. Pero aquí es donde los espacios de nombres entran en juego.. 

Específicamente, ¿qué pasaría si pudiéramos organizar nuestras clases para que también se asignaran a su ubicación física en el sistema de archivos??

Piénselo de esta manera: digamos que su complemento se llama Acme CSV y que las clases anteriores están organizadas en sus directorios y subdirectorios, etc. Cómo se verían los espacios de nombres para estas clases y cómo se declararían dentro del proyecto?

Eche un vistazo a lo que llamaremos Analizador clase. Esta clase se encuentra en / csv / leer.

Y luego digamos que tenemos nuestra clase que escribe datos en la base de datos:

Finalmente, veamos cómo es el espacio de nombres para la clase que lee datos de la base de datos:

Nada terriblemente complicado, ¿verdad? Aunque el estándar anterior no es como tener para organizar sus archivos, me gusta tratar de asignar mis clases a su ubicación en el disco. Facilita referirse a ellos en trabajos futuros.. 

En este punto, realmente no hay nada más que ver más allá de declarar un tipo de organización de sus clases en la parte superior de sus archivos. Pero cuando comienzas a incorporar la carga automática, esto cambia.

Una palabra en paquetes y subpaquetes

Antes de hablar de carga automática, sin embargo, quiero tener una breve digresión en el @paquete y @subpackage Etiquetas que a menudo estamos tan acostumbrados a ver en los comentarios de archivos..

Por ejemplo, es probable que haya visto algo como esto con respecto a nuestro código anterior:

Pero cuando consulte la documentación de phpDocumentor, verá lo siguiente sobre @subpackage:

Esta etiqueta se considera obsoleta y puede eliminarse en una versión futura de phpDocumentor. Se recomienda utilizar la capacidad de la etiqueta @package para proporcionar múltiples niveles.

Asi que @subpackage está siendo desaprobado, lo que significa que probablemente no deberíamos molestarnos más en usarlo. Qué pasa con la @paquete etiqueta?

La etiqueta @package se utiliza para clasificar los elementos estructurales en subdivisiones lógicas.

El soporte para el anidamiento de múltiples niveles ahora reside únicamente en esa etiqueta. Es bueno saberlo, ¿verdad? Esto significa que el código que vemos arriba se podría escribir algo como esto:

Claro, es un ejemplo simple, pero hace su punto. Menciono esto porque @subpackage es otra etiqueta que a menudo vemos en PHP basado en WordPress que debemos evitar usar si queremos comenzar a adoptar estándares más nuevos.

¿Qué es la carga automática??

Con eso dicho, volvamos a los temas principales a la mano. Ya que hemos cubierto los espacios de nombres, echemos un vistazo a la carga automática. Según el manual de PHP:

Muchos desarrolladores que escriben aplicaciones orientadas a objetos crean un archivo fuente PHP por definición de clase. Una de las mayores molestias es tener que escribir una larga lista de artículos incluidos al principio de cada script (uno para cada clase).

Esto no se podría decir mejor, ¿verdad? Aún así, realmente no explica qué es el autoloading. Simplemente explica el problema que puede resolver..

En PHP 5, esto ya no es necesario ... [se admite la carga] las clases y las interfaces se cargan automáticamente si no están definidas actualmente.

Suena fantástico, ¿verdad? Pero hay una advertencia, y la exploraremos en detalle en el siguiente tutorial. Pero hasta entonces, aquí está: para obtener esta funcionalidad, debemos implementar una función que sepa dónde buscar archivos para cargar y cómo analizar la estructura de directorios de esos archivos..

Suena tedioso, y en algunos casos podría ser, pero si tiene una forma consistente de organizar su trabajo, su código de carga automática puede ser portátil. Es decir, puede tomar la función que escribe, colocarla en cualquier proyecto basado en PHP y estar lista para continuar.

Pero este tutorial específico no se trata de escribir código. Se trata de cubrir la idea detrás de los conceptos del código que implementaremos en el próximo tutorial..

¿Por qué es algo de esto relevante?

Dependiendo de a quién le preguntes, puede ver los espacios de nombres y la carga automática como nuevos en PHP. Para algunos, esto es cierto. Para otros, han estado trabajando con estos dos conceptos por un tiempo..

Una de las cosas acerca de WordPress que puede impedir que adopte nuevas funciones de PHP es su compromiso con la compatibilidad con versiones anteriores. Esto no es necesariamente algo bueno o malo, es un atributo de la aplicación.

Pero como WordPress tiene una versión mínima de PHP en la que se ejecuta, no siempre se adoptan nuevas características de idioma. Y cuando esa versión mínima es adoptada, los desarrolladores específicos de WordPress tardan un poco en comenzar a usar estas funciones en su código.

Y eso no es algo malo. En resumen, los desarrolladores están siguiendo el ritmo de la aplicación al ritmo en que madura..

Pero a medida que WordPress continúa avanzando o usted tiene control sobre el entorno en el que se ejecuta su proyecto, es posible que le interese adoptar algunas de las características del lenguaje que no sabía que existían o que no sabía que estaban disponibles.

Los espacios de nombres y la carga automática son dos características poderosas del lenguaje que contribuyen en gran medida a hacer que el código sea más legible, más organizado e incluso un poco más fácil de mantener. Por lo tanto, si aún no los ha utilizado en ninguno de sus trabajos en WordPress, especialmente si está trabajando con los complementos de WordPress, le insto a que considere hacerlo..

Conclusión

Los espacios de nombres nos dan la capacidad de organizar nuestro código de una manera que facilita mucho la agrupación lógica de clases relacionadas. Además, la carga automática hace que nuestro código sea más legible al reducir el número de incluir, include_once, exigir, o requerir una vez declaraciones que necesitamos usar.

Esto hace que el código fuente que escribimos sea más claro, ya que se centra únicamente en la lógica de la que es responsable, sin tener que hacer nada como importar archivos, manejar varias estructuras de directorios y conocer más de lo que debería (por no hablar de el desarrollador tiene que volver a escribir todo constantemente para poder acceder a un archivo).

Y para aquellos que desean asegurarse de que la estructura de su código siga la estructura organizativa de los archivos y directorios en el disco, nos brinda la capacidad de organizar nuestros proyectos exactamente de la misma manera..

Incluso con todo lo dicho, esto es solo una forma y algunas ventajas de los espacios de nombres y la carga automática. Los temas más avanzados se tratan en el manual de PHP y en otros proyectos de código abierto que te recomiendo revisar si tienes tiempo..

En el siguiente tutorial, resumiremos esta serie aplicando lo que hemos aprendido en este tutorial a medida que introducimos espacios de nombres y carga automática a nuestro complemento de WordPress. Hasta entonces, si está buscando otro material relacionado con WordPress, puede encontrar todos mis tutoriales anteriores en mi página de perfil y puede seguirme en mi blog o en Twitter..

No dude en dejar cualquier pregunta destacada que pueda tener sobre los espacios de nombres, la carga automática o WordPress en el siguiente formulario.

Recursos

  • Espacios de nombres
  • Clases de carga automática
  • phpDocumentor