Frage

Ich benutze einen Autoloader-Klassen enthalten. Was ich jetzt tun, ist „glob“ zu lesen verschiedenen dir das und schieben sie in einem Array verwenden. Gibt es eine bessere Lösung für dieses?

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

Ich benutze dies innerhalb einer Klasse automatisch geladen. Das Problem ist, dass ich für die Dateien mit glob suchen. Gibt es einen schnelleren Weg, dies zu tun?

War es hilfreich?

Lösung

Autoloading wird ausgelöst, wenn Sie versuchen, eine Klasse zu verwenden, die nicht auf PHP kennen. Wenn Sie include / require verwenden, wird PHP alle Verzeichnisse durchlaufen Sie für Ihre include_path in PHP.ini angegeben, so sollte es keinen Grund zur Verwendung glob. In Ihrem Fall sollte es ausreichen, die include_path zu

einstellen
/path/to/includes/classes/system/

Die schnellste Möglichkeit, Dateien zu schließen wäre ein verwenden class2file Karte . Dies erfordert jedoch Sie eine solche Karte erstellen und regelmäßig aktualisiert wird, wenn Sie Ihre Anwendung ändern.

Andere Tipps

PHP gelöst hat dieses Problem bereits für Sie. PHPs Einbau-Autoloader . Sie niemals Ihre eigene Rolle, wenn die Sprache / Framework bietet es für Sie.

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

... das ist noch nicht der beste Weg, aber es wird Sie um glob () verwenden. Wenn Sie häufig alle Ihre systementities laden sollte es eine hartcodierte require () Liste in einem boot / config-Skript sein. Es gibt viele Möglichkeiten, wie Klassendateien zu organisieren und zu holen. die Zeit der Suche nach Scripts reduzieren Sie als Schnittstelle denken Sie an Ihre filetree könnte. Aus Gründen der Einfachheit können Sie alle nicht obligatorischen Klassen im selben Ordner speichern, die is_file reduziert () rufen zu einem nach unten.

In meinem System I Objektklassen gruppiert in Ordnern mit ihren jeweiligen Steuerskripts und Ansichten. Meine __autoload () Funktion hat eine einfachere Job -

$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top