Buenas tardes! Les quiero consultar cuál es el mecanismo correcto (si existe en Toba) para cargar clases en tiempo de ejecución.
Hasta hace un tiempo, había agregado algunas clases al archivo autoload del proyecto (para que se carguen automáticamente), pero veo que al inicio del archivo hay una leyenda que dice “Esta clase fue y será generada automáicamente. NO EDITAR A MANO.”. Además, si todas las clases necesarias fueran cargadas en ese archivo (y eventualmente no se necesitaran), se estarían cargando “de balde”.
Tiene Toba algun mecanismo para cargar clases bajo demanda (por ejemplo toba_cargador::cargar($clase)? (pienso en algo que enmascare spl_autoload_register() de PHP, por ejemplo).
Encontré esta manera de lograrlo:
//Este es el punto de montaje por defecto (podría crear otro desde Toba Editor)
$punto = toba::puntos_montaje()->get('proyecto');
toba_cargador::cargar_clase_archivo($punto->get_id(), 'ruta/a/archivo/clase.php' , 'mi_proyecto' );
$mi_objeto = new Clase_recien_cargada();
la advertencia esta porque si luego alguien ejecuta el comando para generar dicho archivo, dichos cambios no van a seguir alli.
Si el/los archivos en cuestion son clases que se encuentran dentro de la carpeta php del proyecto el comando deberia poder levantarlos y agregarlos a la lista sin mayor inconveniente (salvo que sus nombres de clase esten repetidos) o haya algun detalle con el encoding (segun la version de Toba).
Además, si todas las clases necesarias fueran cargadas en ese archivo (y eventualmente no se necesitaran), se estarían cargando "de balde".
Que las clases esten listadas en el archivo no quiere decir que se cargan, unicamente se recuperan del Hashmap aquellas que son solicitadas… el resto simplemente esta en la lista.
Eso es lo mas cercano a lo que es un classMap en composer.
Tiene Toba algun mecanismo para cargar clases bajo demanda (por ejemplo toba_cargador::cargar($clase)? (pienso en algo que enmascare spl_autoload_register() de PHP, por ejemplo).
Encontré esta manera de lograrlo:
//Este es el punto de montaje por defecto (podría crear otro desde Toba Editor)
$punto = toba::puntos_montaje()->get('proyecto');
toba_cargador::cargar_clase_archivo($punto->get_id(), 'ruta/a/archivo/clase.php' , 'mi_proyecto' );
$mi_objeto = new Clase_recien_cargada();
A ver, el mecanismo de autoload es en realidad un fallback que permite atrapar situaciones en las cuales no se hizo la inclusion del archivo en cuestion para ser procesado, onda falto el include/require_once.
Por la practicidad de esto ultimo, que ademas suma legibilidad y evita algunos inconvenientes por inclusiones “refactorizadas”, se “abusa” un poco del mecanismo practicamente dejando que todas las inclusiones se realicen por autoload.
Fuera de eso, en particular en Toba se usa la funcion de toba_cargador para levantar todos aquellos archivos que se encuentran especificados en metadatos, por eso se solicitan punto de montaje, proyecto y el path relativo del archivo. En definitiva no es mas que un require_once con overhead, ya que usa datos indirectos para determinar el path completo al archivo.
Si te sirve usala, no hay ningun drama… pero si tenes la ruta y no depende de un punto de montaje, le vas a sumar overhead al cuete.