Menu
Coddy logo textTech

Introducción a los Namespaces

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 10 de 91.

A medida que tus proyectos de PHP crecen, crearás muchas clases. ¿Qué sucede cuando dos clases tienen el mismo nombre?

Por ejemplo, podrías tener una clase User para tu blog y otra clase User para tu tienda. Los espacios de nombres resuelven este problema organizando las clases en grupos lógicos.

Un espacio de nombres es como una carpeta para tus clases. Lo declaras en la parte superior de tu archivo PHP usando la palabra clave namespace:

<?php
namespace Blog;

class User {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

Ahora puedes tener otra clase User en un espacio de nombres diferente:

<?php
namespace Shop;

class User {
    public $email;
    
    public function __construct($email) {
        $this->email = $email;
    }
}

Para usar una clase con espacio de nombres, haces referencia a ella con su ruta completa usando una barra inversa:

<?php
$blogUser = new \Blog\User("Alice");
$shopUser = new \Shop\User("alice@example.com");

echo $blogUser->name . "\n";
echo $shopUser->email . "\n";

Salida:

REQUIRED OUTPUT FORMAT: [Your translated content here]
Alice
alice@example.com

La barra invertida \ separa los niveles del espacio de nombres, de forma similar a como las barras separan las carpetas en una ruta de archivo. También puedes crear espacios de nombres anidados como App\Models\Blog para una organización más profunda.

Punto clave: Los espacios de nombres evitan conflictos de nombres y mantienen tu código organizado. Declara siempre el espacio de nombres antes de cualquier otro código en tu archivo (excepto las declaraciones declare).

challenge icon

Desafío

Fácil

Organicemos una pequeña aplicación usando espacios de nombres para evitar conflictos de nombres entre clases con el mismo nombre.

Imagina que estás creando un sistema que gestiona tanto vehículos como animales. Ambos dominios tienen una entidad llamada Car: una representa un automóvil real, mientras que la otra es una gata mascota llamada "Car" (¡sí, algunas personas llaman así a sus gatos!).

Crearás tres archivos:

  • Vehicle/Car.php: Define una clase Car en el espacio de nombres Vehicle con una propiedad public $brand. El constructor debe aceptar el nombre de la marca y asignarlo. Añade un método describe() que devuelva "Vehicle: [brand]".
  • Animal/Car.php: Define una clase Car en el espacio de nombres Animal (¡es una gata llamada Car!). Debe tener una propiedad public $age. El constructor acepta la edad y la asigna. Añade un método describe() que devuelva "Cat named Car, age: [age]".
  • main.php: Incluye ambos archivos de clase usando require_once. Crea un objeto de cada espacio de nombres usando sus rutas completas de espacio de nombres y luego imprime el resultado de llamar a describe() en cada objeto (cada uno en su propia línea).

En main.php, crea:

  • Un Vehicle\Car con la marca "Toyota"
  • Un Animal\Car con la edad 3

Recuerda usar la barra inversa \ para hacer referencia a clases con espacios de nombres mediante su ruta completa al crear objetos.

Pruébalo tú mismo

<?php
// Incluye los archivos de clase
require_once 'Vehicle/Car.php';
require_once 'Animal/Car.php';

// TODO: Crea un objeto Vehicle\Car con la marca "Toyota"
// Recuerda usar la ruta completa del namespace con barra invertida

// TODO: Crea un objeto Animal\Car con edad 3
// Recuerda usar la ruta completa del namespace con barra invertida

// TODO: Imprime el resultado de describe() para cada objeto (cada uno en su propia línea)

?>
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online