Inicio » Blog » Namespaces en PHP

Namespaces en PHP

Bienvenido a una nueva lección de nuestro curso básico de PHP 8. Hoy nos metemos con los namespaces, una herramienta clave para mantener tu código ordenado y evitar conflictos. Si ya manejas interfaces y clases abstractas, esto es el toque final para que tu proyecto sea una obra maestra. Todo va a ser claro, práctico y con ejemplos que te van a flipar. ¡Empecemos!

¿Qué son los namespaces?

Un namespace (espacio de nombres) es como una carpeta invisible que agrupa clases, funciones y constantes bajo un nombre único. Sirve para evitar choques cuando dos elementos tienen el mismo nombre (por ejemplo, dos clases llamadas Persona de proyectos distintos). Es como ponerle una etiqueta a tu código para que todo esté en su lugar.

Beneficios:

  • Evita conflictos: Dos clases con el mismo nombre pueden convivir si están en namespaces distintos.
  • Mejora la organización: Agrupa código relacionado, como si fuera una biblioteca.
  • Facilita el trabajo en equipo: Perfecto para proyectos grandes o al usar librerías externas.

La receta básica en PHP es esta:

namespace MiEspacio;

// Una clase dentro del namespace
class MiClase {
    // Código aquí
}

// Usarla desde otro archivo
use MiEspacio\MiClase;
$objeto = new MiClase();
  • namespace: Define el espacio de nombres al inicio del archivo.
  • use: Importa clases de otros namespaces para usarlas sin escribir la ruta completa.

Probando namespaces en acción

¡Manos a la obra! Vamos a crear una estructura en curso_php8. Crea una carpeta miNamespace dentro de curso_php8 y dos archivos dentro: persona.php y cliente.php.

Archivo 1: curso_php8/miNamespace/persona.php

<?php
namespace miNamespace;

class Persona {
    public function saludar($name) {
        return "Bienvenido a casa, $name!";
    }
}

Archivo 2: curso_php8/miNamespace/cliente.php

<?php
require_once __DIR__ . '/persona.php';

use miNamespace\Persona;

$cliente = new Persona();
echo $cliente->saludar("Juan Carlos") . "<br>";

Abre http://localhost/curso_php8/miNamespace/cliente.php. Verás:

Bienvenido a casa, Juan Carlos!

¿Qué pasó?

  • En persona.php, definimos un namespace miNamespace y la clase Persona.
  • En cliente.php, incluimos persona.php con require_once y usamos use para importar la clase.
  • Creamos un objeto y llamamos a su método sin conflictos.

Ejemplo práctico

Ejemplo: Biblioteca de animales

Crea una carpeta animales en curso_php8 con dos archivos:

Archivo 1: curso_php8/animales/mamifero.php

<?php
namespace Animales;

class Mamifero {
    public function hacerSonido() {
        return "¡Sonido de mamífero!";
    }
}

Archivo 2: curso_php8/animales/zoo.php

<?php
require_once __DIR__ . '/mamifero.php';

use Animales\Mamifero;

$perro = new Mamifero();
echo $perro->hacerSonido() . "<br>";

Ejecuta http://localhost/curso_php8/animales/zoo.php. Verás:

¡Sonido de mamífero!

¿Qué pasó?

  • Organizamos la clase Mamifero en el namespace Animales.
  • La usamos en otro archivo con use, manteniendo todo limpio.

Ejercicio para practicar

¡Tu turno! Ve a curso_php8 y prueba este reto:

  1. Podcast con namespaces
    Crea una carpeta Podcast en curso_php8 con tres archivos para las clases y uno aparte para usarlas. Archivo 1: curso_php8/Podcast/tecnologia.php
 <?php
   namespace Podcast;

   class Tecnologia {
       public $nombre;
       public $conductor;
       public $capitulo;

       public function __construct($nombre, $conductor, $capitulo) {
           $this->nombre = $nombre;
           $this->conductor = $conductor;
           $this->capitulo = $capitulo;
       }

       public function describir() {
           return "Podcast: $this->nombre, con $this->conductor, capítulo $this->capitulo";
       }
   }

Archivo 2: curso_php8/Podcast/entretenimiento.php

<?php
   namespace Podcast;

   class Entretenimiento {
       public $nombre;
       public $conductor;
       public $capitulo;

       public function __construct($nombre, $conductor, $capitulo) {
           $this->nombre = $nombre;
           $this->conductor = $conductor;
           $this->capitulo = $capitulo;
       }

       public function describir() {
           return "Podcast: $this->nombre, con $this->conductor, capítulo $this->capitulo";
       }
   }

Archivo 3: curso_php8/Podcast/noticias.php

<?php
   namespace Podcast;

   class Noticias {
       public $nombre;
       public $conductor;
       public $capitulo;

       public function __construct($nombre, $conductor, $capitulo) {
           $this->nombre = $nombre;
           $this->conductor = $conductor;
           $this->capitulo = $capitulo;
       }

       public function describir() {
           return "Podcast: $this->nombre, con $this->conductor, capítulo $this->capitulo";
       }
   }

Archivo 4: curso_php8/index.php

<?php
   require_once __DIR__ . '/Podcast/tecnologia.php';
   require_once __DIR__ . '/Podcast/entretenimiento.php';
   require_once __DIR__ . '/Podcast/noticias.php';

   use Podcast\Tecnologia;
   use Podcast\Entretenimiento;
   use Podcast\Noticias;

   $tech = new Tecnologia("TechBit", "Ana", 10);
   $entre = new Entretenimiento("Risas", "Luis", 5);
   $news = new Noticias("El Mundo", "Sofía", 20);

   echo $tech->describir() . "<br>";
   echo $entre->describir() . "<br>";
   echo $news->describir() . "<br>";
   ?>

Ejecuta http://localhost/curso_php8/index.php. Verás:

Podcast: TechBit, con Ana, capítulo 10
Podcast: Risas, con Luis, capítulo 5
Podcast: El Mundo, con Sofía, capítulo 20

Consejos para no enredarte

  • Nombres claros: Usa nombres de namespaces que reflejen la carpeta o el propósito (como Podcast).
  • Convención: Por estándar, el namespace suele coincidir con la estructura de carpetas.
  • Usa use: Importa clases para escribir menos y mantener el código legible.
  • Rutas correctas: Asegúrate de que require_once apunte al archivo correcto.

¡A por más orden!

¡Gran trabajo, máquina! Ahora los namespaces son tu aliado para mantener tu código organizado como una biblioteca pro. En la próxima lección, veremos traits para compartir código sin repetirte. Si algo no te queda claro, déjame un comentario.

Lo que aprendiste hoy:

  • Qué son: Espacios para agrupar clases y evitar conflictos.
  • namespace y use: Tus herramientas para definir e importar.
  • Ejemplos vivos: Hiciste personas y animales organizados como crack.
  • Practicaste: Creaste un sistema de podcasts como pro.
  • Tip del pro: Usa namespaces para proyectos grandes y no temas importar con use.

Deja un comentario

Scroll al inicio