Al igual que la mayoría de los desarrolladores web en estos días, estoy disfrutando plenamente de los beneficios de la sólida arquitectura MVC para aplicaciones y sitios web. Al hacer MVC con PHP, la carga automática obviamente es extremadamente útil.Estrategias eficientes de carga automática y asignación de nombres de PHP
Me he convertido en un fan de spl_autoload_register
simplemente definiendo una sola función __autoload()
, ya que es obviamente más flexible si está incorporando diferentes módulos base que cada uno usa su propia carga automática. Sin embargo, nunca me he sentido bien con las funciones de carga que escribo. Implican una gran cantidad de comprobación de cadenas y escaneo de directorios para buscar posibles clases para cargar.
Por ejemplo, digamos que tengo una aplicación que tiene una ruta de la base definida como PATH_APP
, y una estructura sencilla con directorios llamados models
, views
y controllers
. A menudo utilizo una estructura de nombres por la cual los archivos se llaman IndexView.php
y IndexController.php
dentro del directorio apropiado, y los modelos generalmente no tienen un esquema particular por defecto. Puede que tenga una función de cargador para esta estructura como esta que consigue registrado en spl_autoload_register
:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
Si no se encuentra después de eso, podría tener otra función para escanear subdirectorios en el directorio de modelos. Sin embargo, todo el análisis if/else -ing, la verificación de cadenas y el escaneo de directorios me parece ineficiente, y me gustaría mejorarlo.
Tengo mucha curiosidad acerca de qué nombre de archivo y estrategias de carga automática pueden emplear otros desarrolladores. Estoy buscando específicamente buenas técnicas para emplear para la carga automática eficiente, y no alternativas a la carga automática.
proxeneta +1 por frialdad – Louis
Definitivamente me gusta el enfoque de subrayado. Hace la traducción de clase a archivo mucho más eficiente. – zombat
Ajustar 'array_unique()' alrededor de su matriz '$ files'. Si no hay guiones bajos en el nombre de la clase, está probando cada archivo dos veces. – mpen