Klassen in PHP5 automatisch includieren

Im Blog von Marcel habe ich gestern einen interessanten Artikel zur autoload() Funktionaliät von PHP5 gelesen und daher möchte ich das Thema selbst nochmals an dieser Stelle aufgreifen.

Kurz gesagt, empfiehlt Marcel In seinem Beispiel die verschiedenen Verzeichnisse in denen sich die zu includierenden Klassen befinden, zuvor in einem Array zu speichern und dieses dann mit Hilfe einer Schleife zu durchlaufen. Bei jedem Schleifendurchlauf wird nun mittels file_exits() geprüft, ob die gesuchte Klasse vorhanden und ggf. wird diese dann ins Script includiert.

Soweit die Theorie, doch in der Praxies habe ich eben diese Vorgehensweise bereits einmal in einer easyLink Testumgebung genutzt und hier bin ich doch sehr schnell an die Grenzen gestoßen. Mit zunehmender Größe des Verzeichnis – Arrays wurde das Script messbar langsamer und daher kann ich die Lösung auch nur für kleinere Projekte empfehlen.

Bei diesen widerum macht es aber keinen Sinn, die einzelnen Klassen in x verschiedenen Verzeichnissen zu verschachteln und deshalb möchte ich euch einfach mal weitere Möglichkeit aufzeigen, die euch vielleicht helfen könnte, dass Problem zu lösen.

Die autoload() – Funktion in der aktuellen easyLink Testumgebung ist z.B. so aufgebaut:

/**
 * Ermöglicht das automatische einbinden der vom Script benötigten Klassen. 
 * 
 * @author Sascha Schoppengerd
 * @copyright by MountainGrafix 
 */
function __autoload($className) {
	if (file_exists(ABSPATH.'lib/util/' . $className . '.class.php')) {
		require_once(ABSPATH.'lib/classes/' . $className . '.class.php');
	} else {
		die('Die notwendige Klasse: ' . $className . ' konnte nicht gefunden werden.');
	}
}

Ich habe also ein Verzeichnis mit dem Namen /lib/classes/ und in diesem Verzeichnis befinden sich alle Klassendateien, die sehr oft im Script benötigt werden.

Darunter fallen dann z.B. Klassen zur Bearbeitung von Strings oder auch Klassen für den HTTP Zugriff auf entfernte Webserver. Dateien, die ich hingegen nicht so oft oder nur an ganz bestimmten Stellen benötige, die verfrachte ich in ein gesondertes Verzeichnis im Ordner lib/ und binde sie anschließend ganz gewöhnlich via. require_once() ein.

Ich versuche also mit meiner Variante einen Mittelweg zwischen dem Komfort, den mir autoload() bietet und der notwendigen Performance zu finden und mit Sicherheit gibt es noch hunderte andere Lösungen, die ebenso gut funktionieren wie die Beispiele von Marcel und mir, doch letztendlich hat sich diese Vorgehensweise zumindest in easyLink bewährt.

2 comments for “Klassen in PHP5 automatisch includieren

  1. 10. Juli 2008 at 17:47

    Alternativ kann man natürlich überlegen die Klassennamen entsprechend der Verzeichnisse, in denen sie liegen, zu gestalten. Beispiel:

    Klassenname: UtilString

    Man könnte nun den übergebenen Klassennamen nach Großbuchstaben trennen und damit die entsprechende Verzeichnis Struktur ROOT . ‚lib/Util/String.class.php‘ ermitteln.

    Somit spart man sich das file_exist() Gedöns, benutzt nur noch eine String Funktion zum Ermitteln der Großbuchstaben und greift direkt auf die Klasse zu.

    Ich werde das bei Zeiten mal vergleichen …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.