Autoload Composer
Composer nos brinda un montón de ventajas para manipular archivos y dependencias en nuestro proyecto PHP. Si alguna vez has visto por ejemplo el framework Laravel, te preguntarás como funciona el término use
que tanto se usa en un proyecto creado con este.
Autoload nos permite cargar nuestras clases de forma que no tenemos que hacer include
de la clase cada vez que la vamos a usar.
Ralizemos un ejemplo de Autoload con composer y en paralelo las mismas clases pero sin aplicar el auto load.
Para ello crearé un directorio con 2 carpetas en 1 cargaré todas las clases con autoload y a la otra no se le aplicará nada. La estructura de mi directorio será la siguiente.
- exrphp
- clases
- aclases
una vez creado mi directorio del proyecto debere usar composer en mi proyecto esto lo puedo hacer creando el composer.json y correr
consolephp composer.phar install
o correr composer init, si tenemos installado composer globalmente lo puede correr con el siguiente comando.
Terminal/consolecomposer init
En mi caso correré init
Como pude ver al correr composer init
nos irá guiando para correr un composer.json y como paso final lo instalara.
Ahora si lo desea, antes de seguir vea php namespaces. Si lo recuerda bien, aunque usáramos use debíamos importar la clase que estábamos usando.
Hagamos que la carpeta aclases use composer autoload use mientras que clases no lo use.
Lo haremos con psr-4, ya que es el más simple:
composer.json"autoload": { "psr-4": {"ALoad\\": "aclases/"} }
ALoad
– seria el namespace que usare en la carpeta aclase, podemos definir varios namespaces y carpetas para que sean usados.
"autoload": { "psr-4": { "ALoad\\": "aclases/", "Namespace2\\": "carpeta2", "Namespace3\\": "carpeta3" } }
Como puede ver en la siguiente imagen he creado un index.php y he implementado clases una que posee autoload y otra que no
exrphp/index.phpPor lo general en proyectos con algún framework se usa él, autoload, y se llama al archivo autoload.php que está en vendor, de hecho es este archivo.
Los framework usan el archivo index.php llamando a autoload.php.
index.phprequire __DIR__ . '/vendor/autoload.php';
De esta manera se incluyen todas las clases que utilizara el framework, las cuales pueden ser cientas o incluso más. En la mayoría de los frameworks aunque usted no lo crea estamos en un index.php el cual está oculto de su vista.
Este index.php llama a un controlador y el controllador probablemente llame a una vista la cual será renderizada en pantalla. Esta modalidad de usar el index.php no solo pasa en frameworks también hay CMS que la usan.
Algo que se me pasaba por alto es la forma de rehacer el archivo autoload.php para ello use:
Terminal/consolecomposer dump-autoload
Bien ahora es probable que se este preguntando pero entonces como sabe la clase que usa una dependencia de terceros yo nunca realizo un include o require de la carpeta. Veamos un ejemplo con la Carbon una extencion para manejar fechas.
Terminal/consolecomposer require nesbot/carbon
Como cualquier instalación de una dependencia con composer. Ahora su uso
use Carbon\Carbon;
Bien y mi proyecto como sabe de ese namespace y clase?, bueno para saber es debemos ir a la carpeta vender/nesbot/carbon ahi encontrara un composer.json al abrirlo nos encontraremos con lo siguiente.
nesbot/carbon/composer.jsonComo se dará cuenta carbon ya viene con un autoload especificado.
Referencia