Usuario:ManuelRomero/ProgramacionWeb/Composer

De WikiEducator
Saltar a: navegación, buscar

https://medium.com/tech-tajawal/php-composer-the-autoloader-d676a2f103aa

Composer



Icon define.gif
Qué es 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



Icon define.gif
Qué hace composer
Entre otras acciones, ¡¡¡¡¡composer me va a permitir¡¡¡¡¡:
  • Gestionar de forma automática la autocarga de los ficheros que implementan las clases que utilizo
  • Instalar librerías y paquetes de terceros para incorporar a mis proyectos




  • 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.



Icon key points.gif

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:*

Directorios autoload.png

  • 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.*

Autoload composer.png

  • 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.


Icon summary.gif
Objetivo

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;


Icon summary.gif
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:

{
  "autoload": {
    "psr-4": {
      "MiProyecto\\": "src/"
    }
  }
}

Esto significa:

  • Las clases con namespace **MiProyecto** se cargarán desde la carpeta **src/**
  • La clase: