Domanda

Io uso un caricatore automatico per includere le classi. Quello che sto facendo in questo momento è l'utilizzo di "glob" per leggere diversi dir di e spingerli in un array. C'è una soluzione migliore per questo?

$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:

Io uso questo all'interno di una classe di caricamento automatico. Il problema è che ho per cercare i file con glob. Esiste un modo più veloce per fare questo?

È stato utile?

Soluzione

L'auto-caricamento verrà attivato ogni volta che si sta tentando di utilizzare una classe che non si conosce a PHP. Se si utilizza include / require, PHP passerà attraverso tutte le directory specificate per il vostro include_path in php.ini, quindi non ci dovrebbero alcun motivo per utilizzare glob. Nel tuo caso, dovrebbe essere sufficiente per impostare il include_path a

/path/to/includes/classes/system/

più veloce modo per includere i file sarebbe quella di utilizzare un class2file map . Tuttavia, questo richiede la creazione di una tale mappa e tenerlo aggiornato quando si modifica l'applicazione.

Altri suggerimenti

PHP ha già risolto questo problema per voi. Utilizzare PHP di built-in caricatore automatico . Mai rotolare il proprio quando il linguaggio / framework fornisce per voi.

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);
}

... che non è ancora il modo più grande, ma si aggira utilizzando glob (). Se si sta caricando comunemente tutti i systementities ci dovrebbe essere un elenco hardcoded require () in uno script di avvio / config. Ci sono un sacco di opzioni su come organizzare e recuperare i file di classe. Per ridurre il tempo di ricerca per gli script si potrebbe pensare la tua FileTree come interfaccia. Per semplicità, si potrebbe mettere tutte le classi non obbligatorie nella stessa cartella, riducendo l'is_file () chiama verso il basso per uno.

Nel mio sistema ho classi di oggetti raggruppati in cartelle con i rispettivi script di controllo e punti di vista. La mia funzione __autoload () ha un lavoro più semplice -

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top