Usuario:ManuelRomero/PHP/autoload
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
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
Archivo:Directorios autoload.php
- 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
Idioma no válido.
Necesita especificar un idioma como esto: <source lang="html4strict">...</source>
lenguajes soportados para sintaxis remarcada:
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic
{ "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
- 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