Espacio de nombres en PHP

Ha sido un viaje lleno de baches, en lo que respecta al soporte de espacio de nombres en PHP. Afortunadamente, se agregó al lenguaje en PHP 5.3, y la estructura aplicable del código PHP ha mejorado mucho desde entonces. Pero, ¿cómo los usamos exactamente??


¿Qué es un espacio de nombres??

"¡No olvides escapar de la barra invertida cuando guardas un nombre de espacio de nombres en una cadena!"

Imagina un espacio de nombres como un cajón en el que puedes poner todo tipo de cosas: un lápiz, una regla, un pedazo de papel, etc. Estas son tus pertenencias. Directamente debajo de tu cajón está el de alguien más, y él pone las mismas cosas en él. Para evitar utilizar los elementos de otros, decide etiquetar los cajones para que quede claro a quién pertenece.

Anteriormente, los desarrolladores tenían que usar guiones bajos en sus clases, funciones y constantes para separar las bases de código. Eso es equivalente a etiquetar las pertenencias de los demás y colocarlos en un gran cajón. Claro, es al menos algún tipo de organización, pero es muy ineficiente..

Espacio de nombres al rescate! Puede declarar la misma función, clase, interfaz y definiciones constantes en espacios de nombres separados sin recibir errores fatales. Esencialmente, un espacio de nombres no es más que un bloque de código jerárquicamente con código PHP regular.

Los estás utilizando!

Es importante tener en cuenta que usted hace uso indirecto de los espacios de nombres; a partir de PHP 5.3, todas las definiciones que aún no están declaradas en un espacio de nombres definido por el usuario se encuentran en el espacio de nombres global.

El espacio de nombres global también contiene todas las definiciones internas de PHP, como eco(), mysqli_connect (), y el Excepción clase. Debido a que el espacio de nombres global no tiene un nombre de identificación único, a menudo se lo denomina espacio global.

Tenga en cuenta que no es una obligación utilizar espacios de nombre.

Tu script PHP funcionará perfectamente bien sin ellos, y este comportamiento no va a cambiar muy pronto.


Definiendo un espacio de nombres

Una definición de espacio de nombres es la primera declaración que el intérprete de PHP debe encontrar en un archivo PHP. La única declaración que se permite que ocurra sobre una declaración de espacio de nombres es una declarar declaración, y luego otra vez, solo si declara la codificación del script.

Declarar un espacio de nombres es tan simple como usar el espacio de nombres palabra clave. Un nombre de espacio de nombres debe obedecer las mismas reglas que otros identificadores en PHP. Por lo tanto, un espacio de nombres debe Comience con una letra o un guión bajo, seguido de cualquier número de letras, números o guiones bajos..

 

Si desea asignar un bloque de código al espacio global, use el espacio de nombres palabra clave sin añadir un nombre.

 

Se le permite tener múltiples espacios de nombres en el mismo archivo.

 

También puede dispersar el mismo espacio de nombres en diferentes archivos; El proceso de inclusión de archivos los fusiona automáticamente. Por lo tanto, es una buena práctica de codificación limitar la cantidad de definiciones de espacio de nombres a una por archivo, tal como lo haría con las clases.

El espacio de nombres se usa para evitar definiciones conflictivas e introducir más flexibilidad y organización en su base de código.

Tenga en cuenta que los corchetes que rodean el bloque de código de espacio de nombres son completamente opcionales. De hecho, seguir la regla del espacio de un nombre por archivo y omitir los corchetes hace que su código sea mucho más limpio: no es necesario sangrar el código anidado.

Sub-espacios de nombres

Los espacios de nombres pueden seguir una cierta jerarquía, al igual que los directorios en el sistema de archivos de su computadora. Los subespacios de nombres son extremadamente útiles para organizar la estructura de un proyecto. Por ejemplo, si su proyecto requiere acceso a la base de datos, es posible que desee colocar todo el código relacionado con la base de datos, como una excepción de la base de datos y un controlador de conexión, en un espacio de nombres denominado Base de datos.

Para mantener la flexibilidad, es aconsejable almacenar subespacios de nombres en subdirectorios. Esto fomenta la estructuración de su proyecto y hace que sea mucho más fácil usar cargadores automáticos que siguen el estándar PSR-0..

PHP usa el barra invertida como su separador de espacio de nombres.


Dato curioso: en el RFC para decidir qué separador de espacio de nombres se debe usar, incluso consideraron usar un emoticono.
// myproject / database / connection.php  

Puedes tener tantos subespacios como quieras.

 

La definición de espacios de subnombre con bloques de código anidados no es compatible. El siguiente ejemplo arrojará un error fatal muy descriptivo: "Las declaraciones de espacio de nombres no se pueden anidar".

 

Código de llamada desde un espacio de nombres

Si desea crear una instancia de un nuevo objeto, llamar a una función o usar una constante de un espacio de nombres diferente, use la notación de barra diagonal inversa. Se pueden resolver desde tres puntos de vista diferentes:

  • Nombre no calificado
  • Nombre calificado
  • Nombre completo

Nombre no calificado

Este es el nombre de una clase, función o constante sin incluir una referencia a ningún espacio de nombres en absoluto. Si es nuevo en el espacio de nombres, este es el punto de vista que está acostumbrado a trabajar desde.

 

Nombre calificado

Así es como accedemos a la jerarquía del sub-espacio de nombres; Hace uso de la notación de barra invertida..

 

El siguiente ejemplo arroja un error fatal: "Error grave: no se encontró la clase 'MyProject \ Database \ MyProject \ FileAccess \ Input' porque MyProject \ FileAccess \ Input se aproxima al espacio de nombres en el que se encuentra actualmente.

 

Nombre completo

Los nombres no calificados y los calificados son relativos al espacio de nombres en el que se encuentra actualmente. Solo se pueden usar para acceder a definiciones en ese nivel o para profundizar en la jerarquía de espacios de nombres.

Si desea acceder a una función, clase o constante que reside en un nivel superior en la jerarquía, debe usar el nombre completo, una ruta absoluta en lugar de relativa. Esto se reduce a anteponer su llamada con una barra invertida. Esto permite a PHP saber que esta llamada debe resolverse desde el espacio global en lugar de acercarse a ella relativamente.

 

No es necesario utilizar el nombre completo de las funciones internas de PHP. Llamando a un nombre no calificado para una constante o función que no existe en el espacio de nombres, actualmente está trabajando en los resultados en PHP, buscando el espacio de nombres global para ellos. Este es un respaldo incorporado que no se aplica a nombres de clase no calificados.

Teniendo esto en cuenta, ahora podemos sobrecargar las funciones internas de PHP sin dejar de poder llamar a la función original (o constante).

'; 

Llamadas dinamicas

PHP es un lenguaje de programación dinámico; por lo que también puede aplicar esta funcionalidad para llamar código de espacio de nombre. Esto es esencialmente lo mismo que instanciar clases de variables o incluir archivos de variables. El separador de espacio de nombres que usa PHP también es un metacarácter en cadenas. No olvide escapar de la barra invertida cuando almacene un nombre de espacio de nombres en una cadena!

 

los espacio de nombres Palabra clave

No solo es el espacio de nombres palabra clave utilizada para definir un espacio de nombres, también se puede utilizar para resolver explícitamente el espacio de nombres actual, funcionalmente similar a la yo palabra clave para las clases.

 

los __NAMESPACE__ constante

Como el yo La palabra clave no se puede utilizar para determinar cuál es el nombre de la clase actual, la espacio de nombres la palabra clave no se puede utilizar para determinar cuál es el espacio de nombres actual. Por eso tenemos el __NAMESPACE__ constante.

 

Esta constante es muy útil para aprender si recién estás comenzando con espacios de nombres; También es útil para la depuración. Como es una cadena, también se puede usar en combinación con llamadas de código dinámico que discutimos anteriormente.


Aliasing o Importando

"no es una obligación de usar espacios de nombres"

El espacio de nombres en PHP tiene soporte para importador. Importación también se conoce como aliasing. Solo las clases, las interfaces y los espacios de nombres pueden ser alias o importados.

Importar es un aspecto muy útil y fundamental del espacio de nombres. Le brinda la posibilidad de utilizar paquetes de código externo, como bibliotecas, sin tener que preocuparse por nombres en conflicto. La importación se logra utilizando el utilizar palabra clave. Opcionalmente, puede especificar un alias personalizado con el como palabra clave.

use [nombre de la clase, interfaz o espacio de nombres] como [opcional_alterno_alterno]

Cómo está hecho

Un nombre completo puede incluirse en un nombre más corto y no calificado para que no tenga que escribir su nombre completo cada vez que quiera usarlo. El alias o la importación deben ocurrir en el ámbito más alto de un espacio de nombres o en el ámbito global. Tratar de hacer esto en el alcance de un método o función no es válida sintaxis.

 

Alternativamente, puede alias un nombre diferente:

 

También se le permite importar clases globales, como la Excepción clase. Cuando se importa, ya no tiene que escribir su nombre completo.

Tenga en cuenta que los nombres de importación no se resuelven en relación con el espacio de nombres actual sino desde un punto de vista absoluto, comenzando en el espacio global. Esto significa que una barra invertida inicial no es necesaria y no se recomienda.

 

Aunque es posible llamar dinámicamente el código del espacio de nombre, no se admite la importación dinámica.

 

Conclusión

El espacio de nombres se usa para evitar definiciones conflictivas e introducir más flexibilidad y organización en su base de código. Recuerda que no estás obligado a usar espacios de nombres; es una característica utilizada en combinación con un flujo de trabajo orientado a objetos. Con suerte, sin embargo, considerará llevar su (futuro) proyecto de PHP al siguiente nivel haciendo uso del espacio de nombres. Te has decidido ya?