Sven Rautenberg: include_once vs. include

Beitrag lesen

Moin!

Ich verstehe nicht ganz,
wann setze ich include_once wann include?

Du vermeidest beides am Besten.

Warum? Weil beides im Fehlerfall nur eine Warnung produziert und ansonsten weitermacht. Der Fehlerfall bedeutet aber, dass Dinge, die du anscheinend als wichtig erachtet hast (sonst wären sie nicht eingebunden worden), nicht geladen werden konnten. Das wird man in der Regel nicht einfach ignorieren wollen.

Nutze deshalb require und require_once. Diese beiden Varianten brechen das Skript ab, wenn die einzubindende Datei nicht eingebunden werden kann.

Jetzt bleibt nur noch die Frage "mit _once oder ohne". Auch hier ist die Antwort eindeutig: Wenn's geht, lieber ohne. Denn das Verwalten aller bisher eingebundenen Dateien kostet Speicher und Rechenzeit. Die ultimative Performance kriegt man nur ohne "_once". Andererseits gibt es Code, der an mehr als einer Stelle dieselbe Datei einbinden will, und in dieser Datei stehen Definitionen, die man nur einmal pro Skriptablauf machen darf. Dann wäre mit "_once" besser.

Dies gilt übrigens ausdrücklich für das Laden von Klassen via Autoloader NICHT! Denn die Autoload-Funktion wird nur aktiviert, wenn die Klasse noch nicht bekannt ist - das ist aber NACH dem Einbinden der Klassendatei nie mehr der Fall, also wird der Autoloader kein zweites Mal versuchen, diese Klasse einzubinden. Folglich ist "require_once()" an dieser Stelle überflüssig.

- Sven Rautenberg