Usuario:ManuelRomero/ProgramacionWeb/Composer
https://medium.com/tech-tajawal/php-composer-the-autoloader-d676a2f103aa
Contenido
Composer
|
Lo mismo que un 'director de orquesta, organiza y dirige todos los instrumentos para que la música suene de forma armoniosa, composer va a ser un orquestador que gestionará todos los paquetes y librerías necesarias para que mi proyecto pueda funcionar correctamente como una unidad |
Entre otras acciones, ¡¡¡¡¡composer me va a permitir¡¡¡¡¡:
|
- Sería ideal tener un sistema que nos permitiera indicar dónde se encuentran las clases, generar automáticamente la autocarga y mantenerlo todo organizado.*
Para eso existe Composer, que incorpora diferentes estrategias para el autoload: classmap y PSR-4.
Usando Composer con classmap
- Creamos una estructura de directorios, por ejemplo:*
- Ejemplo de clase:*
<?php class B { public function __toString() { return "Hola desde la clase B"; } }
- Creamos el fichero composer.json indicando que Composer debe escanear el directorio Clases/:*
{ "autoload": { "classmap": [ "Clases" ] } }
- Actualizamos Composer para generar la carga automática:*
composer update
- Composer crea automáticamente la carpeta vendor/ y genera el fichero de autocarga.*
- Ahora sólo tenemos que incluir el autoload en nuestro proyecto:*
<?php require "vendor/autoload.php";
- Si añadimos nuevos ficheros, recuerda regenerar el autoload:*
composer dumpautoload
---
Usando PSR-4
- PSR-4 es el método moderno y recomendado de autocarga. Usa los namespaces para localizar las clases automáticamente sin necesidad de regenerar el autoload cada vez.*
- Referencias recomendadas:*
https://styde.net/curso-de-laravel-5-que-es-psr-4-y-uso-de-los-namespaces/ https://diego.com.es/namespaces-en-php https://www.php.net/manual/es/language.namespaces.php
- Espacio de nombres
- Un namespace es una forma de organizar clases, funciones e interfaces evitando conflictos entre nombres.*
- Es equivalente a la organización en directorios del sistema de ficheros.*
Ejemplo equivalente en archivos reales:
/home/profesor/dwes/notas.ods /home/profesor/bd/notas.ods
Puedes tener dos clases con el mismo nombre si pertenecen a distintos namespaces.
|
Los namespaces de PHP permiten agrupar clases, funciones, interfaces y constantes relacionadas. |
Declarar un namespace
- El namespace debe ser la primera línea del fichero (sin espacios previos).*
<?php namespace MiProyecto;
- También puede tener varios niveles separados por barras invertidas \':*
<?php namespace MiProyecto\Nivel1\Subnivel2;
|
---
PSR-4 en Composer
- PSR-4 es más potente y elegante que classmap, y no requiere regenerar el autoload cuando se añaden nuevas clases.*
- Se basa completamente en los namespaces.*
Ejemplo de configuración en composer.json:
{ "autoload": { "psr-4": { "MiProyecto\\": "src/" } } }
Esto significa:
- Las clases con namespace **MiProyecto** se cargarán desde la carpeta **src/**
- La clase:

