Simplease-Logo

Im Simplease-Blog schreiben wir über Design, Web-Entwicklung und unser Leben als Selbstständige.

PHP Autoloading: Klassen automatisch einbinden

von Andreas Riedmüller am 24. April 2012

Bei Objektorientiertem PHP-Code ist es üblich, für jede Klasse eine separate Datei mit dem Namen KLASSENNAME.class.php anzulegen. Diese Datei muss dann immer eingebunden werden wenn die Klasse im Code verwendet wird. Die meisten PHP-Dateien beginnen infolgedessen mit mehreren include() bzw. require() Anweisungen. Wenn man einmal darauf vergisst kommt eine Fehlermeldung und man muss zurück in den Editor, die nicht gefunden Klasse einbinden und weiter geht es. Nicht besonders schlimm, aber nervig und seit PHP 5 einfach zu vermeiden. Denn ab PHP 5 gibt es die __autoload() Funktion. Damit können PHP-Dateien in denen Klassen definiert sind automatisch eingebunden werden falls diese erforderlich sind.

So funktioniert es

Sobald eine Klassendefinition nicht gefunden werden kann, ruft PHP automatisch die Autoload-Funktion auf und übergibt ihr als Parameter den Namen der nicht gefundenen Klasse. In dieser Funktion kann man dann selbst bestimmen was in solch einem Fall passieren soll, z.B. die Datei einbinden in der die Klasse definiert wurde.

Mit folgendem Code versucht PHP die Datei KLASSENNAME.class.php im Ordner „classes“ zu laden falls eine Klassendefinition nicht gefunden werden kann:

function __autoload($class_name) {
    include 'classes/' . $class_name . '.class.php';
}

Aber Vorsicht!

Wenn mehrere Skripte von __autoload() Gebrauch machen, kann es dabei zu Kollisionen kommen. So ein Problem hatte ich mit der Template Engine Smarty. Ein Kommentar in der PHP-Dokumentation hat mir geholfen dieses Problem zu lösen.

… So, the better way is to avoid __autoload() and use spl_register_autoload() instead. If you have written this already, just rename your function to something like __autoload_my_classes, and in the next, call spl_autoload_register as:
function __autoload_my_classes($classname)
{
  # ... your logic to include classes here
}
spl_autoload_register('__autoload_my_classes');

Mit folgendem Code funktioniert es bei mir, wichtig dabei ist das der Code erst nach Smarty eingebunden wird:

function __autoload_my_classes($class_name)
{
    require 'classes/'.$class_name . '.class.php';
}
spl_autoload_register('__autoload_my_classes');

Bei mir funktioniert das jetzt einwandfrei. Wer verwendet das schon länger? Fallen irgendjemanden Nachteile ein die sich daraus, auch nur rein Hypothetisch, ergeben könnten?

Remote Usability Tests - einfach gemacht.
Vorheriger Artikel: Feiert euch gegenseitig
Nächster Artikel: Kindle Touch und das WLAN

Du hast eine Meinung dazu? Wir freuen uns :)

Nach Kategorie filtern

Produkte von Simplease

Userbrain - Usability Testing

User-Tests einfach und am laufenden Band.
Mehr erfahren

Neue Artikel per E-Mail

Facebook Link Twitter Link