Menu
Coddy logo textTech

Autoloader de Composer

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 13 de 91.

Escribir tu propio autoloader funciona, pero los proyectos de PHP reales utilizan Composer para gestionar el autoloading de forma automática. Composer lee la configuración de tu proyecto y genera un autoloader optimizado que sigue los estándares PSR-4.

La configuración reside en un archivo composer.json en la raíz de tu proyecto. Así es como defines las reglas de autoloading:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Esto le indica a Composer que cualquier clase que comience con App\ debe cargarse desde el directorio src/. Después de configurar esto, Composer genera los archivos del cargador automático (autoloader) en un directorio vendor/.

Para usar el autoloader de Composer, solo necesitas una línea al principio de tu archivo de entrada:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

Esa única sentencia require maneja toda la carga de clases para todo tu proyecto. Puedes definir múltiples mapeos de espacios de nombres si es necesario:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

Punto clave: El autoloader de Composer elimina las inclusiones manuales de archivos y garantiza una carga de clases consistente en todo tu proyecto. Es el enfoque estándar utilizado por prácticamente todas las aplicaciones y frameworks modernos de PHP.

challenge icon

Desafío

Fácil

Vamos a construir una pequeña aplicación que utiliza el enfoque de carga automática (autoloading) de Composer para organizar clases en múltiples archivos. Simularás cómo un proyecto PHP real estructura su código con espacios de nombres PSR-4 y un cargador automático central.

Crearás cuatro archivos que trabajarán juntos:

  • src/Models/Product.php — Define una clase Product en el espacio de nombres App\Models. Debe tener las propiedades public $name y public $price, un constructor que acepte y asigne ambos valores, y un método getInfo() que devuelva "[name]: $[price]".
  • src/Models/Customer.php — Define una clase Customer en el espacio de nombres App\Models. Debe tener una propiedad public $name, un constructor que acepte y asigne el nombre, y un método greet() que devuelva "Welcome, [name]!".
  • vendor/autoload.php — Crea un cargador automático simple usando spl_autoload_register que imite el comportamiento de Composer. Debe mapear el prefijo de espacio de nombres App\ al directorio src/, convirtiendo los separadores de espacio de nombres en separadores de directorio y añadiendo .php para cargar el archivo correcto.
  • index.php — Este es tu archivo de punto de entrada. Requiere el cargador automático de vendor/autoload.php con una sola línea, luego usa la palabra clave use para importar tanto App\Models\Product como App\Models\Customer. Crea un Product con el nombre "Laptop" y el precio 999, y un Customer con el nombre "Alice". Imprime el resultado de llamar a greet() en el cliente y getInfo() en el producto (cada uno en su propia línea).

El concepto clave aquí es que tu index.php solo necesita una sentencia require para cargar el cargador automático; después de eso, todas las clases se cargan automáticamente cuando las usas. Así es exactamente como funcionan los frameworks y aplicaciones PHP modernos con Composer.

Hoja de referencia

Composer automatiza la carga de clases leyendo un archivo de configuración composer.json y generando un autoloader optimizado que sigue los estándares PSR-4.

Define las reglas de carga automática en composer.json:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Esto mapea el espacio de nombres App\ al directorio src/. Composer genera archivos de autoloader en un directorio vendor/.

Utiliza el autoloader de Composer con una única sentencia require:

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

Define múltiples mapeos de espacios de nombres si es necesario:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

El autoloader de Composer elimina las inclusiones manuales de archivos y es el enfoque estándar en las aplicaciones PHP modernas.

Pruébalo tú mismo

<?php
// TODO: Requerir el autoloader de vendor/autoload.php

// TODO: Usar la palabra clave 'use' para importar App\Models\Product

// TODO: Usar la palabra clave 'use' para importar App\Models\Customer

// TODO: Crear un Product con el nombre "Laptop" y el precio 999

// TODO: Crear un Customer con el nombre "Alice"

// TODO: Imprimir el resultado de greet() del cliente

// TODO: Imprimir el resultado de getInfo() del producto
?>
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