Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Composer»
(→Composer) |
|||
| Línea 16: | Línea 16: | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | *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'''. | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | {{MRM_Puntos_clave| | ||
| + | *Cada clase en su propio fichero* | ||
| + | *El fichero debe llamarse igual que la clase* | ||
| + | }} | ||
| + | ===Usando Composer con ''classmap''=== | ||
| − | + | *Creamos una estructura de directorios, por ejemplo:* | |
| − | + | ||
| − | + | ||
| − | * | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | * | + | |
| − | + | ||
| − | + | ||
[[Archivo:directorios_autoload.png]] | [[Archivo:directorios_autoload.png]] | ||
| − | + | ||
| + | *Ejemplo de clase:* | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
| − | + | class B { | |
| − | + | public function __toString() { | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | class B | + | |
| − | { | + | |
| − | public function __toString() | + | |
| − | + | ||
| − | + | ||
return "Hola desde la clase B"; | return "Hola desde la clase B"; | ||
} | } | ||
} | } | ||
</source> | </source> | ||
| − | + | ||
| − | + | *Creamos el fichero '''composer.json''' indicando que Composer debe escanear el directorio ''Clases/'':* | |
| + | |||
<source lang=php> | <source lang=php> | ||
{ | { | ||
"autoload": { | "autoload": { | ||
"classmap": [ | "classmap": [ | ||
| − | " | + | "Clases" |
] | ] | ||
} | } | ||
} | } | ||
</source> | </source> | ||
| − | * | + | |
| + | *Actualizamos Composer para generar la carga automática:* | ||
| + | |||
<source lang=bash> | <source lang=bash> | ||
composer update | composer update | ||
</source> | </source> | ||
| − | * | + | |
| − | [[Archivo:autoload_composer.png]] | + | *Composer crea automáticamente la carpeta '''vendor/''' y genera el fichero de autocarga.* |
| − | * | + | [[Archivo:autoload_composer.png]] |
| + | |||
| + | *Ahora sólo tenemos que incluir el autoload en nuestro proyecto:* | ||
| + | |||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
require "vendor/autoload.php"; | require "vendor/autoload.php"; | ||
| + | </source> | ||
| + | *Si añadimos nuevos ficheros, recuerda regenerar el autoload:* | ||
| − | + | <source lang=bash> | |
| − | + | composer dumpautoload | |
</source> | </source> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | ==Usando | + | --- |
| − | *https://styde.net/curso-de-laravel-5-que-es-psr-4-y-uso-de-los-namespaces/ | + | |
| + | ==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 | ;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.* | |
| − | + | ||
| − | *Es | + | Ejemplo equivalente en archivos reales: |
| − | |||
<source lang=php> | <source lang=php> | ||
| − | + | /home/profesor/dwes/notas.ods | |
| − | + | /home/profesor/bd/notas.ods | |
</source> | </source> | ||
| + | |||
| + | Puedes tener dos clases con el mismo nombre si pertenecen a distintos namespaces. | ||
| + | |||
{{MRM_Resumen| | {{MRM_Resumen| | ||
| − | + | 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).* | ||
| + | |||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
namespace MiProyecto; | namespace MiProyecto; | ||
| − | |||
</source> | </source> | ||
| − | * | + | |
| + | *También puede tener varios niveles separados por barras invertidas ''\''':* | ||
| + | |||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
| − | namespace MiProyecto\ | + | namespace MiProyecto\Nivel1\Subnivel2; |
| − | + | ||
</source> | </source> | ||
| − | |||
| − | |||
| − | |||
| − | + | {{MRM_Resumen|Title=Comentarios sobre namespaces| | |
| − | * | + | *Cada namespace suele corresponder a un directorio. |
| − | * | + | *No es obligatorio que coincidan exactamente, pero es buena práctica.* |
| − | + | }} | |
| − | * | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | --- | ||
| + | ===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''': | ||
| − | |||
| − | |||
<source lang=php> | <source lang=php> | ||
{ | { | ||
| − | "autoload":{ | + | "autoload": { |
| − | "psr-4":{ | + | "psr-4": { |
| − | + | "MiProyecto\\": "src/" | |
| − | + | ||
} | } | ||
| + | } | ||
} | } | ||
| + | </source> | ||
| − | + | Esto significa: | |
| − | + | ||
| − | + | * Las clases con namespace **MiProyecto** se cargarán desde la carpeta **src/** | |
| − | + | * La clase: | |
Revisión de 20:26 16 nov 2025
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:

