Si quieres que tus proyectos en PHP se vean y funcionen como software profesional, necesitas conocer Composer, la herramienta que estructura tu código y delega la autocarga de clases. Con ella dejas de escribir include o require por cada archivo y empiezas a construir aplicaciones bajo un estándar real de la industria.
¿Qué es Composer y por qué lo usan los proyectos PHP profesionales?
Composer es el gestor de dependencias y autocarga de clases que utilizan los sistemas serios hechos en PHP. Su poder principal, al menos en este punto, es automatizar la carga de clases para que tú no tengas que incluir archivo por archivo dentro de tu proyecto.
Sin Composer, tu código se llena de líneas como "aquí necesito la clase curso, voy a incluirla" y "aquí necesito otro archivo, también lo incluyo". Esa repetición se vuelve insostenible. Composer resuelve eso de un solo movimiento.
¿Qué hace Composer en un proyecto PHP? Gestiona dependencias y carga automáticamente las clases que defines en tu proyecto, eliminando la necesidad de hacer include o require manuales en cada archivo.
¿Cómo configurar el archivo composer.json con autoload PSR-4?
Todo arranca con un archivo llamado composer.json en la raíz del proyecto. Ahí abres y cierras llaves, declaras la sección autoload y aplicas el estándar PSR-4, que es la convención profesional de PHP para autocargar clases.
La idea es simple: le dices a Composer que cada vez que tu código mencione un namespace como App, redirija esa búsqueda hacia una carpeta específica de tu proyecto. Por convención, esa carpeta se llama src porque representa el código fuente.
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
Esa carpeta src la creas tú a mano. Es donde vivirá tu aplicación.
¿Qué comando instala el autoload de Composer?
Una vez configurado el composer.json, abres la terminal y ejecutas el comando para que Composer haga su trabajo. El proceso genera automáticamente una carpeta vendor con el archivo autoload.php dentro.
Ahí ocurre la magia: Composer inspecciona tu sistema y crea un archivo interno llamado PSR4.php donde queda registrada la regla que escribiste. Cada vez que tu código diga App, Composer sabrá que debe buscar en src.
No necesitas memorizar lo que pasa por debajo, pero sí entender que toda la inteligencia de la autocarga vive en vendor/autoload.php.
¿Cómo organizar las clases con namespaces en la carpeta src?
Después de instalar el autoload, mueves tus clases (por ejemplo, Curso y Tipo) hacia la carpeta src. Cada archivo debe declarar al inicio su namespace:
php
<?php
namespace App;
class Curso {
// ...
}
¿Por qué `App` y no otro nombre? Porque eso fue lo que registraste en el `composer.json`. Si hubieras escrito `Platzi`, entonces todas tus clases tendrían que declarar `namespace Platzi`.
Aquí entra una práctica importante: en proyectos de software libre se usa el nombre del proveedor seguido del componente, por ejemplo `Platzi/MiComponente`. Esto evita colisiones entre paquetes de distintos autores. En este caso usamos `App` por simplicidad.
> **¿Qué es un namespace en PHP?** Es un identificador que agrupa clases bajo un mismo nombre lógico, evitando conflictos cuando dos clases distintas tienen el mismo nombre en proyectos diferentes.
### ¿Cómo importar clases desde el archivo index?
El archivo `index.php` es la puerta de entrada del proyecto. Ahí cargas el autoload una sola vez y luego importas las clases con la palabra clave `use`:
php
<?php
require __DIR__ . '/vendor/autoload.php';
use App\Curso;
use App\Tipo;
Fíjate en el detalle del `__DIR__`. Esa constante devuelve la **ruta absoluta** del archivo actual, no una ruta relativa. La diferencia es clave.
## ¿Cuál es la diferencia entre ruta relativa y ruta absoluta en PHP?
Una ruta relativa parte desde la posición del archivo y mira hacia los lados buscando sus hermanos. Una ruta absoluta entrega el camino completo del sistema, sin depender desde dónde se ejecute.
Si quieres comprobarlo tú mismo, imprime el valor de `__DIR__` en pantalla:
php
var_dump(__DIR__);
Verás en el navegador la ruta completa de tu proyecto. Eso es alcance profesional: tu código no se rompe si cambias la forma en que lo ejecutas.
## ¿Por qué agregar la carpeta vendor al gitignore?
La carpeta `vendor` no se sube al repositorio. Cualquiera que clone tu proyecto puede regenerarla ejecutando Composer, así que ocupar espacio en Git no tiene sentido.
Para excluirla, creas un archivo `.gitignore` en la raíz y agregas:
vendor/
Al guardar, notarás que la carpeta cambia de color en tu editor, señal de que Git ya la está ignorando.
- Mantienes el repositorio liviano.
- Evitas conflictos de versiones entre dependencias.
- Sigues la convención que usan todos los proyectos PHP profesionales.
Con esto, tu proyecto deja de ser un conjunto de archivos sueltos con `include` por todas partes y pasa a tener una **estructura profesional con autocarga delegada a Composer**. Tu cabeza queda libre para concentrarse en lo único que importa: el código dentro de `src`.
Como desafío, recrea esta misma estructura en un proyecto propio. Crea tu `composer.json`, define tu *namespace*, organiza tu carpeta `src` y ejecuta el autoload. ¿Qué nombre de proveedor vas a usar para tu proyecto? Cuéntalo en los comentarios.