Cómo Composer carga clases automáticamente

Clase 29 de 33Curso Avanzado de Laravel

Resumen

La autocarga de clases en PHP puede ser simple y ordenada si configuras bien Composer. Aquí verás, con claridad y paso a paso, cómo Composer usa la especificación PCR cuatro para cargar clases sin require manuales, cómo aprovechar Classmap y files, y cómo preparar un paquete para Laravel apuntando a tu carpeta source.

¿Cómo funciona la autocarga con Composer y PCR cuatro?

Composer implementa PCR cuatro, una especificación interoperable que define cómo mapear namespaces, clases y carpetas para que las clases se carguen automáticamente. El objetivo: no escribir require cada vez que usas una clase y mantener una estructura clara.

  • PCR cuatro es una especificación de carga automática interoperable.
  • Composer también puede trabajar con PCR cero.
  • La ruta completa del namespace sigue: proveedor → subnamespaces (carpetas) → nombre de la clase.
  • Todo se configura en composer.json, dentro de la clave autoload.

¿Qué estructura de namespace y clases exige el proveedor?

La estructura parte del proveedor (por ejemplo, APP), seguido de subcarpetas y el nombre de la clase. Así, si el archivo está en APP/Notifications, la clase declara su namespace como APP\Notifications y podrás usarla sin require manual.

  • Proveedor: APP.
  • Subnamespace: Notifications.
  • Uso: APP\Notifications\NombreDeLaClase.

Ejemplo de definición y uso mínimo en PHP:

<?php
namespace APP\Notifications;

class Aviso {}

// En cualquier parte del proyecto, tras ejecutar el autoload de Composer:
$notificacion = new \APP\Notifications\Aviso();

¿Cómo se configura autoload en composer.json?

La configuración vive en la clave autoload. Con PCR cuatro, indicas el proveedor y la carpeta base. Además, puedes combinar con Classmap y files para cubrir casos sin namespace o utilidades globales.

{
  "autoload": {
    "psr-4": {
      "APP\\": "APP/"
    },
    "classmap": [
      "Database/Seed",
      "Database/Factory"
    ],
    "files": [
      "APP/helpers.php"
    ]
  }
}
  • psr-4: mapea el proveedor APP a la carpeta APP/.
  • classmap: carga carpetas completas.
  • files: incluye archivos sueltos como helpers.

¿Qué opciones extra ofrece Composer: classmap y files?

Además de PCR cuatro, Composer permite cargar carpetas enteras o archivos individuales. Esto es útil para código sin namespace o para utilidades globales.

  • Classmap: ideal para carpetas como Database Seed y Database Factory.
  • No requieren namespace: Composer las indexa y las hace disponibles.
  • Files: perfecto para helpers ubicados en APP/helpers.php.

¿Cómo se integran helpers sin namespace?

Si defines un archivo de utilidades, puedes declararlo en files. Composer lo incluirá automáticamente, dejándolo listo para usar en todo el proyecto.

  • Archivo: APP/helpers.php.
  • Beneficio: funciones disponibles sin require.
  • Práctico para utilidades transversales.

¿Cómo usar un paquete propio en Laravel con PCR cuatro?

Para un paquete, debes mapear tu carpeta source a un namespace proveedor. Por ejemplo, definir "laravel s" como proveedor que apunta a source, de modo que tus clases se levanten con PCR cuatro. Después, Composer generará el archivo necesario para que Laravel encuentre las clases.

  • Define el proveedor del paquete: "laravel s".
  • Carpeta base del paquete: source.
  • Composer genera un archivo llamado autoloadad.php dentro de vendor.
  • Laravel lo utiliza en index.php para exponer todas las clases de la aplicación.
  • Próximo paso lógico: crear service providers para incluir el paquete en Laravel.

Habilidades y keywords trabajadas: configuración de composer.json, uso de autoload, PCR cuatro y PCR cero, definición de namespaces y proveedor, mapeo de Classmap, inclusión de files como helpers, estructura de APP y subnamespaces como Notifications, carpetas Database Seed y Database Factory, generación de vendor/autoloadad.php, y preparación de paquetes para Laravel.

¿Tienes dudas sobre cómo mapear tu estructura o nombrar el proveedor? Comparte tu caso y lo revisamos juntos.