In diesem Beitrag geht es um 4 PHP-Methoden, die bei PHP-Entwicklern immernoch viel Verwirrung stiften – include, include_once, require und require_once. Es soll also einerseits geklärt werden, wo die genauen Unterschiede liegen und andererseits, wann welche Methode eingesetzt werden soll.
Prinzipiell werden alle 4 Methoden dazu verwendet, um Code zu laden, allerdings existieren hier wesentliche Unterschiede. Verwendet man den Suffix _once wird jeweils geprüft, ob die entsprechende Datei bereits eingebunden wurde. Dem Namen nach wird der Code also nur genau einmal eingebunden, wohingegen das Weglassen dieses Suffix dazu führt, dass der Code mehrfach eingebunden werden kann. Dieses Problem der Mehrfacheinbindung ist dabei auch gar nicht so unwahrscheinlich, da im Zweifel sehr viele Code-Fragmente andere Dateien benötigen.
Nun zu den Unterschieden zwischen require und include, wobei zunächst auf den Prüfungszeitpunkt des externen Codes eingegangen werden soll. Include_once prüft das Vorhandensein der Datei zu genau dem Zeitpunkt, an welchem dies im Code angegeben ist. Require_once führt diese Überprüfung hingegen vor der Ausführung durch. Der wesentlich gravierendere Unterschied der beiden Methoden liegt allerdings in der Fehlerbehandlung – während include(_once) im Fehlerfall (Datei ist nicht vorhanden) ein WARNING erzeugt, generiert require einen ERROR. Demnach wird der Rest der Datei beim Include trotzdem ausgeführt, bei require allerdings nicht.
Demnach sollten die Funktionen wie folgt verwendet werden:
- include: Die Verwendung von include wird prinzipell nur in Sonderfällen empfohlen, in welchen der Dateiinhalt wirklich mehrfach geladen werden soll und dessen Vorhandensein für die Ursprungsdatei nicht maßgeblich ist.
- include_once: Sollte dann verwendet werden, wenn der externe Code für die Ursprungsdatei nicht zwingend erforderlich ist (z.B.: eine Klasse für den Versand von E-Mail Notifications). Ein Indiz für die Verwendung von include oder include_once ist generell die Notwendigkeit des externen Codes in Abhängigkeit von einer Condition (z.B.: if else, switch).
- require: Sowohl require als auch require_once sollten immer dann benutzt werden, wenn der externe Code unabhängig von irgendwelchen Conditions eingebunden werden soll. require sollte ebenfalls nur in Sonderfällen benutzt werden.
- require_once: Prinzipiell ist diese Funktion die Empfehlenswerteste, wenn die externe Datei obligatorisch für die Ausführung ist.
Ausblick: Für die objektorierte Programmierung mit PHP existiert weiterhin die Möglichkeit der Registrierung von Autoloadern, auf welche im nachfolgenden Beitrag eingegangen wird. Dies ist gerade im Zusammenhang mit dem aktuellen Beitrag interessant, da die 4 behandelte Methoden dadurch fast überflüssig werden.