Pregunta

Yo uso un cargador automático para incluir clases. Lo que estoy haciendo en este momento es el uso de "pegote" de leer diferentes dir de ellos y empujar en una matriz. ¿Hay una mejor solución a esto?

$path = './';

$files = array_merge(
glob($path.'includes/classes/system/*.class.php'),
glob($path.'includes/classes/system/baseclasses/*.class.php'),
glob($path.'includes/classes/system/systementities/*.class.php'));

EDIT:

Yo uso esto dentro de una clase de carga automática. El problema es que tengo que buscar los archivos con pegote. ¿Hay una manera más rápida de hacer esto?

¿Fue útil?

Solución

La carga automática se activará cada vez que está intentando utilizar una clase que no se sabe a PHP. Si utiliza include / require, PHP pasará por todos los directorios especificados para su include_path en php.ini, por lo que debe hay razón para usar glob. En su caso, debería ser suficiente para establecer el include_path a

/path/to/includes/classes/system/

El rápido manera de incluir archivos sería utilizar un class2file map . Sin embargo, esto requiere la creación de un mapa tal y mantenerlo actualizado cuando modifique su aplicación.

Otros consejos

PHP ya ha resuelto este problema para usted. Uso de PHP incorporada cargador automático . Nunca rodar su propia cuando el idioma / marco proporciona por usted.

function __autoload($class) {
  $classfile = $class.'.class.php';
  $path = './includes/classes/system/';
  if (is_file($path.$classfile)) require_once($path.$classfile);
  if (is_file($path.'baseclasses/'.$classfile)) require_once($path.'baseclasses/'.$classfile);
  if (is_file($path.'systementities/'.$classfile)) require_once($path.'systementities/'.$classfile);
}

... que todavía no es la mejor manera, pero te lleva por el uso de glob (). Si está comúnmente cargando todas sus systementities debe haber una lista no modificable require () en un script de arranque / config. Hay una gran cantidad de opciones sobre cómo organizar a buscar archivos de clase. Para reducir el tiempo de búsqueda de secuencias de comandos que usted podría pensar en su FileTree como interfaz. En aras de la simplicidad, se puede poner todas las clases no obligatorias en la misma carpeta, la reducción de la is_file () llama a uno.

En mi sistema tengo clases de objetos agrupados en carpetas con sus respectivas secuencias de comandos de control y puntos de vista. Mi función __autoload () tiene un trabajo más sencillo -

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top