Diferencia entre revisiones de «Usuario:ManuelRomero/composer»
De WikiEducator
Línea 32: | Línea 32: | ||
spl_autoload_register(autocarga); | spl_autoload_register(autocarga); | ||
</source> | </source> | ||
− | |||
</div> | </div> | ||
− | <div class=" | + | |
+ | <div class="slide"> | ||
;La autocarga | ;La autocarga | ||
*Esto está bien, y previo a utilizar una clase, cargamos previamente el fichero que lo implementa. | *Esto está bien, y previo a utilizar una clase, cargamos previamente el fichero que lo implementa. | ||
Línea 42: | Línea 42: | ||
*Como vemos, este método presenta el inconveniente de que tienes todas las clases implementadas en un mismo directorio, o bien en la función de autocarga busca en directorios según el nombre de la clase, lo cual puede ser muy incómodo y poco productivo. | *Como vemos, este método presenta el inconveniente de que tienes todas las clases implementadas en un mismo directorio, o bien en la función de autocarga busca en directorios según el nombre de la clase, lo cual puede ser muy incómodo y poco productivo. | ||
*Para ello, de alguna forma habría que añadir un prefijo a cada nombre de fichero de cada clase que identificar la ubicación de directorio | *Para ello, de alguna forma habría que añadir un prefijo a cada nombre de fichero de cada clase que identificar la ubicación de directorio | ||
− | </div> | + | </div><div class="slide"> |
− | <div class=" | + | |
− | + | ||
===Complicando la estructura del directorio=== | ===Complicando la estructura del directorio=== | ||
− | * | + | *Vamos a trabajar con una estructura compleja de directorios en un proyecto. |
+ | *Supongamos la siguiente estructura de clases en nuestro proyecto como se especifica en la imagen | ||
[[Archivo:estructura_clases_ej2.png|400px]] | [[Archivo:estructura_clases_ej2.png|400px]] | ||
+ | </div><div class="slide"> | ||
<br /> | <br /> | ||
+ | ;Estructura de directorios ejemplo | ||
*Este ejemplo implica la siguiente estructura de directorios y las clases correspondientes | *Este ejemplo implica la siguiente estructura de directorios y las clases correspondientes | ||
− | |||
[[Archivo:implementacion_ficheros1.png|center]] | [[Archivo:implementacion_ficheros1.png|center]] | ||
+ | </div><div class="slide"> | ||
+ | ;Estructura de directorios ejemplo | ||
*En cada fichero vamos a escribir el método mágico __toString() para que nos diga el nombre de la clase y el directorio en el que nos encontramos | *En cada fichero vamos a escribir el método mágico __toString() para que nos diga el nombre de la clase y el directorio en el que nos encontramos | ||
<source lang=php> | <source lang=php> | ||
Línea 60: | Línea 62: | ||
} | } | ||
</source> | </source> | ||
− | *La función get_class($obj) retorna el nombre de la la clase de un objeto | + | </div><div class="slide"> |
+ | ;Estructura de directorios ejemplo | ||
+ | *La función '''''get_class($obj)''''' retorna el nombre de la la clase de un objeto | ||
https://www.php.net/manual/es/function.get-class.php | https://www.php.net/manual/es/function.get-class.php | ||
− | *La constante __DIR__ da el nombre del directorio dónde se ubica el fichero que invocamos | + | *La constante '''''__DIR__''''' da el nombre del directorio dónde se ubica el fichero que invocamos |
https://www.php.net/manual/es/language.constants.predefined.php | https://www.php.net/manual/es/language.constants.predefined.php | ||
*El objetivo es instanciar un objeto de cada clase y probarlo | *El objetivo es instanciar un objeto de cada clase y probarlo | ||
− | + | </div><div class="slide"> | |
+ | |||
+ | ;Estructura de directorios ejemplo | ||
+ | *Para poder acceder a cada clase, necesitaríamos tener previamente cargado el fichero que contiene la implementación de la clase. | ||
*Con la función que conocemos de autoload, no podemos hacer de esta forma, podríamos hacer que cada clase tuviera un prenombre que identificara su ubicación y dentro de esta función analizáramos dicho prenombre para localizar el fichero que implementa la clase. | *Con la función que conocemos de autoload, no podemos hacer de esta forma, podríamos hacer que cada clase tuviera un prenombre que identificara su ubicación y dentro de esta función analizáramos dicho prenombre para localizar el fichero que implementa la clase. | ||
− | *De momento para probarlo e identificar nuevos problemas a solucionar, hacemos una carga literal de cada fichero | + | *De momento, para probarlo e identificar nuevos problemas a solucionar, hacemos una carga literal de cada fichero. |
*Lo hacemos con objetos ubicados en el directorio '''''librerias''''' | *Lo hacemos con objetos ubicados en el directorio '''''librerias''''' | ||
+ | </div><div class="slide"> | ||
+ | ;Estructura de directorios ejemplo | ||
+ | |||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
Línea 81: | Línea 91: | ||
echo $c;> | echo $c;> | ||
</source> | </source> | ||
+ | </div><div class="slide"> | ||
+ | ;Estructura de directorios ejemplo | ||
+ | |||
*Y vemos la siguiente salida | *Y vemos la siguiente salida | ||
[[Archivo:salida_ej_1.png|300px]] | [[Archivo:salida_ej_1.png|300px]] | ||
+ | </div><div class="slide"> | ||
+ | ;Estructura de directorios ejemplo | ||
+ | |||
*Con lo que hemos visto hasta ahora de autocarga estaríamos muy limitados por dos temas: | *Con lo que hemos visto hasta ahora de autocarga estaríamos muy limitados por dos temas: | ||
− | #Los ficheros diferentes | + | #Los ficheros diferentes están ubicados en distintos directorios |
#Hay clases con el mismo nombre y ubicadas en distinto que realizarán distintas tareas ... | #Hay clases con el mismo nombre y ubicadas en distinto que realizarán distintas tareas ... | ||
*Para cubrir estas situaciones surge los namespace, si bien no nos van a facilitar la autocarga para lo cual tendremos composer | *Para cubrir estas situaciones surge los namespace, si bien no nos van a facilitar la autocarga para lo cual tendremos composer | ||
+ | |||
+ | </div> | ||
+ | <div class="slide"> | ||
Revisión de 05:16 30 abr 2020
https://medium.com/swlh/composer-everything-i-should-have-known-794225cde691