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 cargador automático funciona, pero los proyectos PHP reales usan Composer para gestionar la carga automática. Composer lee la configuración de tu proyecto y genera un cargador automático optimizado que sigue los estándares PSR-4.

La configuración se encuentra en un archivo composer.json en la raíz de tu proyecto. Así es como defines las reglas de carga automática:

{
    "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 autocargador en un directorio vendor/.

Para usar el cargador automático 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 instrucción require gestiona la carga de todas las clases de todo tu proyecto! Puedes definir varias asignaciones de espacios de nombres si es necesario:

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

Punto clave: El autocargador de Composer elimina las inclusiones manuales de archivos y garantiza una carga coherente de clases 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

Construyamos una pequeña aplicación que utilice el enfoque de carga automática de Composer para organizar clases en varios 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 funcionan 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 establezca 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 establezca el nombre, y un método greet() que devuelva "Welcome, [name]!".
  • vendor/autoload.php: Crea un cargador automático simple utilizando spl_autoload_register que imite el comportamiento de Composer. Debe asociar el prefijo del espacio de nombres App\ con el directorio src/, convirtiendo los separadores de espacios de nombres en separadores de directorios y añadiendo .php para cargar el archivo correcto.
  • index.php: Este es tu archivo de entrada. Requiere el cargador automático desde vendor/autoload.php en una sola línea y, después, utiliza 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 a getInfo() en el producto (cada uno en su propia línea).

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

Pruébalo tú mismo

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

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

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

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

// TODO: Crea un Customer con nombre "Alice"

// TODO: Imprime el resultado de greet() del customer

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