1. Code
  2. PHP
  3. PHP Scripts

Tutorial sobre los espacios de nombres en PHP: los conceptos básicos

Scroll to top

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

En este tutorial expondré los conceptos básicos de los espacios de nombres en PHP. Explicaré por qué es posible que los necesites y te mostraré cómo usar espacios de nombres de PHP en tu desarrollo diario.

La mayoría de las veces terminarás usando bibliotecas de terceros de diferentes proveedores en tus aplicaciones PHP. Ahora bien, podrían haber colisiones entre dos o más bibliotecas si una de ellas intenta reutilizar un nombre que ya está siendo usado por otra biblioteca en tu aplicación. Como probablemente sabes, si tienes una clase, una función o una constante declarada en algún lugar de tu código, no puedes tener otra con el mismo nombre en otro lugar. Si hay una colisión de nombres, esto eventualmente causará problemas en tu aplicación.

Antes de la introducción de los espacios de nombres en PHP, los desarrolladores resolvieron este problema introduciendo diferentes técnicas que podían evitar las colisiones de nombres. Una solución popular era utilizar nombres largos para las clases y funciones. Por ejemplo, para introducir la clase Basededatos en sus bibliotecas, le ponían un prefijo que correspondía con el nombre del vendedor y, por lo tanto, se convertía en Nombrevendedor_Basededatos. Si has escrito código en WordPress o en el framework Zend, seguramente has notado esas prácticas.

Para abordar este problema, los espacios de nombres fueron introducidos en PHP a partir de su versión 5.3. La mejor manera de comprender los espacios de nombres es usando una analogía al concepto de la estructura de directorios en un sistema de archivos. El directorio que se usa para agrupar archivos relacionados tiene el propósito que corresponde a un espacio de nombres. No puedes tener dos archivos con el mismo nombre en el mismo directorio, pero puedes tener archivos con el mismo nombre en directorios diferentes. ¡Los espacios de nombres imitan el mismo principio en PHP!

Básicamente, los espacios de nombres proporcionan una manera de agrupar elementos relacionados entre sí, evitando posibles colisiones de nombres. Sin duda, este ha resultado ser uno de los cambios recientes más significativos en PHP. De hecho, la mayoría de los vendedores de bibliotecas de terceros y frameworks ya han adaptado los espacios de nombres en sus códigos.

Esa fue una breve explicación de lo que son los espacios de nombres. En el siguiente par de secciones veremos cómo usarlos.

Cómo funcionan los espacios de nombres en PHP

En esta sección verás cómo puedes definir un espacio de nombres y agrupar elementos relacionados en su interior.

Definiendo espacios de nombres y subespacios de nombres

Lo primero que hay que hacer es definir un espacio de nombres con la palabra clave namespace en la parte superior del archivo PHP. Todo el código debajo de la palabra clave namespace se convierte en código contenido en un espacio de nombres. Es importante tener en cuenta que esta palabra clave debe colocarse en la parte superior del archivo, asegurándonos de que nada la preceda. La única excepción es la construcción declare, que puedes usar antes de definir un espacio de nombres.

Echemos un vistazo rápido al siguiente fragmento de código que ejemplifica cómo definir un espacio de nombres.

1
<?php
2
namespace Tutsplus;
3
4
// code which is defined here belongs to the Tutsplus namespace

5
?>

Como puedes ver, el ejemplo anterior define el espacio de nombres Tutsplus. El código que se define después de la instrucción namespace Tutsplus; pertenece al espacio de nombres Tutsplus. No puedes acceder a este código directamente de la forma en la que solíamos hacerlo antes de que se introdujeran los espacios de nombres. En la siguiente sección veremos cómo llamar al código del interior de un espacio de nombres.

Para organizar tu código de una mejor manera, PHP te permite definir una jerarquía de espacios de nombres para que puedas dividir y organizar tu código de manera lógica: estos se conocen como subespacios de nombres.

Revisemos el ejemplo anterior:

1
<?php
2
namespace Tutsplus\Code;
3
4
// code which is defined here belongs to the Tutsplus\Code namespace

5
?>

En el ejemplo anterior, el código pertenece al subespacio de nombres Tutsplus\Code. De hecho, puedes definir múltiples subespacios de nombres para dividir tu código a lo largo de la biblioteca, por ejemplo Tutsplus\Code, Tutsplus\Webdesign, Tutsplus\Business, etcétera.

De hecho descubrirás que los desarrolladores siempre diseñan la estructura del directorio de una manera que imita y va de la mano con los subespacios de nombres. Por ejemplo, se supone que la clase Baz, que está definida dentro del espacio de nombres Foo\Bar, debe encontrarse dentro del directorio Vendor\Foo\Bar. ¡Los subespacios de nombres son realmente útiles cuando se trata de organizar tu código!

Cómo usar espacios de nombres

En la sección anterior discutimos los espacios y subespacios de nombres para comprender de qué manera puedes escribir código dentro de un espacio de nombres. En esta sección veremos cómo llamar al código del interior de un espacio de nombres.

Considera el siguiente ejemplo que define el espacio de nombres Tutsplus\Code. Supón que se encuentra en el archivo mylib.php.

1
<?php
2
// mylib.php

3
namespace Tutsplus\Code;
4
5
// define a class

6
class Tutorial {
7
   public function __construct() {
8
      echo "Fully qualified class name: ".__CLASS__."\n";
9
     
10
   } 
11
}
12
13
// define a function

14
function fooBar() {
15
    echo "Fully qualified function name: ".__FUNCTION__."\n";
16
}
17
18
// define a constant

19
const RECORDS_PER_PAGE = 50;
20
?>

Como puedes ver, este código define una clase, una función y una constante dentro del espacio de nombres Tutsplus\Code.

El siguiente ejemplo demuestra cómo usar el código del espacio de nombres que está definido en mylib.php.

1
<?php
2
// app.php

3
require "mylib.php";
4
5
// instantiate the Tutorial class

6
$objTutorial = new \Tutsplus\Code\Tutorial();
7
8
// call the function

9
echo \Tutsplus\Code\fooBar();
10
11
// display the constant

12
echo \Tutsplus\Code\RECORDS_PER_PAGE;
13
?>

En primer lugar, hemos incluido el archivo mylib.php usando la sentencia require.

A continuación hemos usado el nombre de la clase completamente calificado (dentro de un espacio de nombres) para crear una instancia de la clase Tutorial. Si hubieras utilizado new Tutorial() en lugar de new \Tutsplus\Code\Tutorial(), esto habría resultado en un error fatal.

Como no hemos definido ningún espacio de nombres en el archivo app.php, el código pertenece al espacio de nombres global. Así que no puedes acceder a la clase Tutorial sin una referencia al espacio de nombres. Observa que puedes acceder a la clase Tutorial desde el interior del espacio de nombres Tutsplus\Code sin el nombre completamente calificado.

Por supuesto, cuando no se definen espacios de nombres, las clases, funciones y constantes se colocan en el espacio global y actúan de la misma manera en la que lo hacían antes de que se admitieran los espacios de nombres.

Cómo importar espacios de nombres

Como has visto en la sección anterior, necesitas usar el nombre completamente calificado para hacer referencia a los elementos que estén dentro de un espacio de nombres. Ahora bien, es realmente engorroso usar nombres completamente calificados en todos los lugares en donde quieras hacer referencia a un elemento perteneciente a un espacio de nombres.

Afortunadamente puedes importar espacios de nombres con el operador use, y así evitar la necesidad de especificar nombres completamente calificados.

Revisemos rápidamente el archivo app.php para ejemplificar cómo podrías usar la función de importación.

1
<?php
2
// app.php

3
use Tutsplus\Code;
4
5
require "mylib.php";
6
7
// instantiate the Tutorial class

8
$objTutorial = new Code\Tutorial();
9
10
// call the function

11
echo Code\fooBar();
12
13
// display the constant

14
echo Code\RECORDS_PER_PAGE;
15
?>

En el ejemplo anterior, hemos importado el espacio de nombres Tutsplus\Code. Ahora solamente necesitas agregar el prefijo Code cuando llames a los elementos pertenecientes al espacio de nombres, y estos serán convertidos automáticamente en los nombres completamente calificados.

Creación de un alias para los espacios de nombres

La creación de un alias es similar a la importación, pero te permite hacer referencia a espacios de nombres largos especificando un nombre más corto.

La mejor forma de comprenderlo es echando un vistazo a un ejemplo.

1
<?php
2
// app.php

3
use Tutsplus\Code as TC;
4
use Tutsplus\Code\Tutorial as Tutorial;
5
6
require "mylib.php";
7
8
// instantiate the Tutorial class with namespace alias TC

9
$objTutorial = new TC\Tutorial();
10
11
// instantiate the Tutorial class with class alias Tut

12
$objTutorial = new Tutorial();
13
14
// call the function

15
echo TC\fooBar();
16
17
// display the constant

18
echo TC\RECORDS_PER_PAGE;
19
?>

Como puedes ver en el ejemplo anterior, hemos creado el alias TC para el espacio de nombres Tutsplus\Code y, por lo tanto, podrías usarlo en vez de especificar el nombre completamente calificado.

De hecho, el uso de un alias es verdaderamente útil cuando se trata de la creación de alias para clases e interfaces. En el ejemplo anterior también hemos creado el alias Tut para la clase Tutorial, que pertenece al espacio de nombres Tutsplus\Code. Así que solamente necesitas usar new Tutorial() para crear una instancia de la clase Tutsplus\Code\Tutorial, mejorando la legibilidad del código.

Los espacios de nombres son realmente útiles cuando se trata de estructurar la base de tu código, junto con los otros beneficios obvios que brindan. Para los desarrolladores de PHP, los espacios de nombres son una función clave que deben aprender y usar.

Conclusión

En este artículo discutimos una de las funciones nuevas de mayor utilidad en PHP, introducida a partir de PHP 5.3: los espacios de nombres. Comenzando con los conceptos básicos, revisamos varios temas como la manera de usar, importar y crear alias para los espacios de nombres.

Aprende PHP con un curso gratuito en línea

Si quieres aprender PHP, ¡consulta nuestro curso gratuito en línea sobre los fundamentos de PHP!

Please accept preferences cookies to load this content.

En este curso, aprenderás los fundamentos de la programación en PHP. Comenzarás con los conceptos básicos, aprendiendo cómo funciona PHP y escribiendo bucles y funciones simples en él. Luego avanzarás a la codificación de clases para una simple programación orientada a objetos (POO). En el camino, aprenderás las habilidades más importantes para escribir aplicaciones para la web: tendrás la oportunidad de practicar cómo responder a las solicitudes GET y POST, analizar JSON, autenticar usuarios y usar una base de datos MySQL.

Los mejores scripts de PHP en CodeCanyon

Si quieres crear funciones especializadas en tu aplicación PHP, o descargar aplicaciones completas que puedas usar y personalizar, echa un vistazo a los scripts profesionales de PHP en CodeCanyon.

Explora miles de los mejores y más útiles scripts de PHP alguna vez creados en CodeCanyon.

PHP scripts on CodeCanyonPHP scripts on CodeCanyonPHP scripts on CodeCanyon

Estos son algunos de los scripts de PHP mejor vendidos y más prometedores disponibles en CodeCanyon para 2020.