Arranquemos de cero.. ¿Qué es PSR-4?
PSR-4 es un estándar (definido por PHP-FIG) que nos permite cargar automáticamente clases PHP sin necesidad de usar require o include manualmente.
- Autoloading: Cuando usas una clase (ej:
new MiClase()), PHP la busca y carga automáticamente gracias a Composer. - Namespaces: Los namespaces (espacios de nombres) son como «rutas virtuales» que organizan tus clases.
- Estructura de carpetas: Tus clases deben seguir una estructura de carpetas que coincida con sus namespaces.
¿Cómo configurar PSR-4 en Composer?
Vamos a empezar a realizar la estructura de proyecto para PHP
mi_proyecto/
├── src/
│ ├── MiApp/
│ │ ├── Cliente.php
│ │ ├── Producto.php
├── vendor/
├── composer.json
Definir namespaces en las clases
Ejemplo: src/MiApp/Cliente.php
<?php
namespace MiApp; // Namespace = MiApp
class Cliente {
public function __construct() {
echo "Cliente creado!";
}
}
Configurar PSR-4 en composer.json
Modificamos el archivo composer.json:
{
"autoload": {
"psr-4": {
"MiApp\\": "src/MiApp/"
}
}
}
DATOS:
"MiApp\\": El namespace base.
"src/MiApp/": La carpeta donde están las clases
Regeneramos el autoloader
Desde la terminal ejecutamos el siguiente comando:
composer dump-autoload
Ahora…. ¿Cómo usamos las clases?
<?php
require __DIR__ . '/vendor/autoload.php'; // Cargamos el autoloader de Composer
use MiApp\Cliente; // Importamos la clase Cliente
$cliente = new Cliente(); // Instanciamos la clase (el autoloading funciona, en teoría, si pasa algo es importante ir leyendo el log que nos genera el PHPServer como vimos en clase)
Reglas clave de PSR-4
- Namespace ≡ Ruta de archivo:
MiApp\Cliente→src/MiApp/Cliente.phpVendor\Paquete\Foo→src/Vendor/Paquete/Foo.php
- El namespace debe terminar en
\\(ej:"MiApp\\"). - Las clases deben tener el mismo nombre que el archivo:
class Cliente→Cliente.php
- Sensible a mayúsculas/minúsculas (en Linux/macOS).
Ejemplo avanzado (múltiples namespaces, lo normal en un proyecto)
src/
├── MiApp/
│ ├── Cliente.php
├── OtroApp/
│ ├── Producto.php
Configuración en composer.json:
{
"autoload": {
"psr-4": {
"MiApp\\": "src/MiApp/",
"OtroApp\\": "src/OtroApp/"
}
}
}
Errores comunes que vamos a tener a la hora de comenzar a trabajar
Class not found:
- Verifica que el namespace coincida con la ruta.
- Revisa mayúsculas/minúsculas.
- Ejecuta
composer dump-autoload.
Namespace mal escrito:
- Asegúrate de que termine en
\\(ej:"MiApp\\").
Resumen rápido para tener en cuenta:
- Namespace = Ruta virtual de la clase que vamos a importar.
- Estructura de carpetas debe coincidir con el namespace SIEMPRE.
- Configura
composer.jsonconpsr-4. - Ejecuta: «
composer dump-autoload"sin las comillas para actualizar.







Deja un comentario