Diferencia entre revisiones de «Usuario:ManuelRomero/PHP/autoload»

De WikiEducator
Saltar a: navegación, buscar
Línea 76: Línea 76:
 
</source>
 
</source>
 
*Podemos ver el resultado
 
*Podemos ver el resultado
[[Archivo:ejercicio_autoload.php]]
+
[[Archivo:ejercicios_autoload.png]]

Revisión de 06:14 26 ene 2019

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

Para cargar de forma automática las clases se usa la función autload implementado la función anónima que recibe en callback como argumento.

spl_autoload_register(function ($clase)){
  require($clase);
 
}
  • Esto está bien, pero para ello deberían de estar todas las clases en el mismo directorio
  • Lo que pretendo es no depender de en qué subdirectorio esté del proyecto.
  • Para ello vamos a usar composer y PSR-4.

Por supuesto, siguiendo las buenas prácricas de programación



Icon key points.gif

Puntos clave

Cada clase está en un fichero que contiene el mismo nombre que la clase Sólo una clase por fichero


  • Vemos como composer realiza todo lo que necesitamos
  • Veamos el ejemplo.
Creamos una estructura de directorios

Directorios autoload.png

En cada directorio creamos clases, para el ejemplo solo muestran un texto
<?php
/**
 * Created by PhpStorm.
 * User: manuel
 * Date: 25/01/19
 * Time: 17:54
 */
 
class B
{
    public function __toString()
    {
        // TODO: Implement __toString() method.
        return "Hola desde la clase B";
    }
}
  • Esto para cada una de las clases.

ahora escribimos un fichero composer

{
  "autoload": {
    "classmap": [
      "Classes"
    ]
  }
}
  • a continuación actulizamos composer
composer update
  • Podemos ver cómo composer ha creado una estructura de carpetas donde ya tiene localizadas todas las clases del proyecto

Autoload composer.png

  • Y debemos incluir en nuestro proyecto el fichero autoload de composer

<soruce lang=php> <?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir);

return array(

   'A' => $baseDir . '/Classes/A.php',
   'B' => $baseDir . '/Classes/B.php',
   'C' => $baseDir . '/Classes/class2/C.php',
   'D' => $baseDir . '/Classes/class3/D.php',
   'E' => $baseDir . '/Classes/class3/E.php',

);

</source>

  • Podemos ver el resultado

Ejercicios autoload.png