php - xmlns - ¿Qué son los espacios de nombres?




qué es el xmlns (6)

Al igual que los directorios y archivos , el espacio de nombres en PHP sirve para agrupar clases , funciones , interfaces y constantes .

Ejemplo:

Filesystem      |   PHP Namespace
----------------|------------------
/Dir/File.txt   |  \Namespace\Class

Proporciona una forma de envolver elementos del espacio global y permite el uso del nombre de elemento simple sin causar una colisión de nombre en un programa. Es compatible con PHP 5.3.0, PHP 7.

Pero hay algunos límites en la analogía entre el espacio de nombres PHP y el sistema de archivos basado en Unix:

                          | Filesystem            |        PHP Namespace
--------------------------|-----------------------|-------------------------
Cas sensitive             |       No              |        Yes                
--------------------------|-----------------------|-------------------------
Name with plain number    |       Yes             |        No
--------------------------|-----------------------|-------------------------
Path level                |       Yes             |        Yes   
--------------------------|-----------------------|-------------------------
Plain metacharacters name |       Yes             |        No        

El principio se extiende al espacio de nombres en la palabra de programación.

¿Qué son espacios de nombres PHP?

¿Qué son los espacios de nombres en general?

Una respuesta Layman con un ejemplo sería genial.


Dado que es más fácil aprender sobre la palabra clave "usar" al conocer el "espacio de nombres", permítanme explicar el espacio de nombres primero mirando un proyecto básico de Laravel.

Hay una clase de controlador con el nombre: Controller.php que está en la ruta: app / Http / Controllers del directorio raíz del proyecto. También hay otra clase de controlador llamada: Controller.php , pero esta está en la ruta: vendor / laravel / framework / src / Illuminate / Routing del directorio raíz del proyecto

No necesita mirar el código fuente aún si es nuevo en php porque puede confundirlo, en su lugar déjeme explicarle la parte que nos importa y nos ayudará a entender el "espacio de nombres" y el "uso". ".

Así que, de hecho, nuestra primera clase de controlador: app / Http / Controllers / Controller.php necesita usar el proveedor de la clase de segundo controlador / laravel / framework / src / Illuminate / Routing / Controller.php . en realidad necesita extender esta clase para tener acceso a su contenido para manejar algunas funcionalidades de enrutamiento cruciales.

Entonces, ¿cómo puede una clase extender otra clase que tenga el mismo nombre? class Controller extends Controller ? esto NO funcionará, a menos que haya una forma de distinguir estas dos clases y es ahí donde el namespace es útil y la palabra clave use ayuda a completar la misión de, permitiendo el uso de; (clases, métodos, interfaces y constantes), con el mismo nombre, en el mismo ámbito.

ahora ¿cómo se hace en el código? ¡muy simple! si miramos el código fuente de la aplicación / Http / Controllers / Controller.php , podemos ver que en la parte superior del espacio de nombres de la clase se declara como: namespace App\Http\Controllers , así es como le das a tu clase un espacio de nombres para que pueda ser referenciado por otras clases ahora esto se ve igual a la ruta a esta clase desde el directorio raíz del proyecto, con poca diferencia y ese es el uso de " \ " en lugar de " / " (igual que el símbolo del sistema en Windows) , pero hay otra diferencia y esa es la aplicación con mayúscula 'A' en el espacio de nombres frente a 'aplicación' con minúscula 'a' en la ruta. También tenga en cuenta que el espacio de nombres distingue entre mayúsculas y minúsculas.

Así que el espacio de nombres es un concepto separado de la ruta, puede seguir la estructura de la ruta si ayuda pero no tiene que ser una ruta exacta a la clase, método, interfaces o constantes, por ejemplo, eche un vistazo a: vendor / laravel / framework /src/Illuminate/Routing/Controller.php código fuente,

vemos en la parte superior de la clase que el espacio de nombres se declara como: Illuminate\Routing

ahora echemos un vistazo a la palabra clave " use ", que usamos, la palabra clave " use " para que nuestra clase tome conciencia de una clase o función específica que queremos usar en nuestra clase

por lo que no estamos importando ni incluyendo nada . Solo le estamos diciendo a nuestra clase que utilizaremos una clase o método específico haciendo referencia a ellos por su espacio de nombres. Echemos un vistazo al código fuente de la aplicación / Http / Controllers / Controller.php , como se puede ver desde la línea: " use Illuminate\Routing\Controller as BaseController ", la palabra clave " use " seguida del espacio de nombres para la clase de destino (tenga en cuenta que Illuminate \ Routing \ Controller.php e Illuminate \ Routing \ Controller 'sin .php la extensión 'son intercambiables)

podemos usar la palabra clave " as " junto con la palabra clave " use " para dar un alias a una clase, método, interfaz o constantes específico que permita a la aplicación / Http / Controllers / Controller.php extender Illuminate \ Routing \ Controller.Controller.php como BaseController en la línea: " class Controller extends BaseController ".


El espacio de nombres es como empaquetar muchas cosas en un solo paquete. Imagine un espacio de nombres como un cajón en el que puede colocar todo tipo de cosas: un lápiz, una regla, un trozo de papel, etc. Para evitar usar los elementos de los demás, decide etiquetar los cajones para que quede claro lo que le pertenece a quién.


Existen técnicas como espacios de nombres en otros lenguajes de programación (como paquetes en Java). Se usan para poder tener varias clases con el mismo nombre dentro de un proyecto.

De la documentación php ( namespace ):

¿Qué son los espacios de nombres? En la definición más amplia, los espacios de nombres son una forma de encapsular elementos. Esto se puede ver como un concepto abstracto en muchos lugares. Por ejemplo, en cualquier sistema operativo, los directorios sirven para agrupar archivos relacionados y actúan como un espacio de nombres para los archivos dentro de ellos. Como ejemplo concreto, el archivo foo.txt puede existir tanto en el directorio / home / greg como en / home / other, pero dos copias de foo.txt no pueden coexistir en el mismo directorio. Además, para acceder al archivo foo.txt fuera del directorio / home / greg, debemos anteponer el nombre del directorio al nombre del archivo utilizando el separador del directorio para obtener /home/greg/foo.txt. Este mismo principio se extiende a los espacios de nombres en el mundo de la programación.


Un espacio de nombre le permite colocar un montón de código bajo un nombre y no tener conflictos de nomenclatura con clases, funciones y constantes.

Le permite a su código vivir en ese espacio de nombres.

PHP usa el carácter un tanto controvertido \ para mostrar niveles de espacio de nombres. La gente se levantó en armas porque también se usa como un personaje de escape.

Para usar el espacio de nombres en PHP, use algo como esto en la parte superior de su archivo.

namespace my\namespace;

Puede encontrar mucha más información en la documentación oficial de PHP para espacios de nombres .


Un espacio de nombres básicamente le permite poner código en un contenedor. Esto evitará problemas con dos funciones (así como clases y variables) que comparten el mismo nombre.

Estos son útiles cuando se trabaja con aplicaciones más grandes para evitar problemas con partes de código que comparten el mismo nombre.

Por ejemplo, digamos que queríamos dos funciones llamadas "TheMessage". Ambos imprimirían (repetirán) mensajes diferentes cada uno. Normalmente, esto causaría un error de sintaxis, ya que no puede tener dos funciones que comparten el mismo nombre.

Para solucionar esto, puede poner estas funciones en espacios de nombres separados. Esto le permitiría usar ambas funciones sin ningún error.







namespaces