Namespaces y Composer
Organizar el código con namespaces y gestionar paquetes de terceros con Composer.
2 min de lectura
A medida que una base de código PHP crece más allá de unos pocos archivos, aparecen rápidamente dos problemas: los nombres de clase colisionan, y necesitas una forma confiable de incorporar código que otras personas escribieron. Los namespaces y Composer resuelven, respectivamente, esos problemas.
Por qué existen los namespaces
<?php
// File: app/Models/User.php
namespace App\Models;
class User {
public function __construct(public string $name) {}
}<?php
// File: app/Services/User.php
namespace App\Services;
class User {
// an entirely different, unrelated "User" concept
}Sin namespaces, dos clases ambas llamadas User en el mismo proyecto colisionarían — PHP no sabría a cuál te refieres. namespace App\Models; al inicio de un archivo delimita cada clase, función y constante declaradas allí bajo ese namespace, de modo que ambas clases User de arriba pueden coexistir como App\Models\User y App\Services\User.
Usar una clase con namespace
<?php
use App\Models\User;
$user = new User("Amara");use App\Models\User; importa una clase con namespace específica para que pueda referenciarse por su nombre corto (User) durante el resto del archivo, en lugar de escribir el nombre completamente calificado \App\Models\User cada vez.
Autoloading: cómo encuentra PHP el archivo de una clase
{
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
}El PHP moderno no requiere hacer require manualmente de cada archivo — el autoloader de Composer mapea un prefijo de namespace a un directorio (siguiendo el estándar PSR-4 mostrado arriba), de modo que referenciar App\Models\User carga automáticamente app/Models/User.php la primera vez que se usa, sin ninguna sentencia require manual en tu código.
Composer: instalar y gestionar paquetes
composer require guzzlehttp/guzzle{
"require": {
"guzzlehttp/guzzle": "^7.0"
}
}composer require descarga un paquete (aquí, una popular librería de cliente HTTP) en un directorio vendor/ y lo registra en composer.json, junto con la restricción de versión (^7.0 significa "7.x, pero no 8.0 o posterior"). Cualquier otra persona en el proyecto ejecuta composer install para obtener exactamente las mismas dependencias.
Usar un paquete instalado
<?php
require "vendor/autoload.php";
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get("https://api.example.com/users");vendor/autoload.php es el autoloader generado por Composer — incluirlo una vez (normalmente en el punto de entrada de tu aplicación) hace que las clases de todos los paquetes instalados estén disponibles mediante use, exactamente igual que tus propias clases con namespace. Todo framework cubierto más adelante en este curso (Laravel, Symfony) se instala y se carga exactamente de esta misma manera.
Pon a prueba lo que acabas de aprender
4 preguntas rápidas. Respóndelas todas correctamente para desbloquear la siguiente lección.
Puedes hacer el cuestionario sin una cuenta — iniciar sesión solo hace que tu resultado cuente para tu progreso.