1. Erläuterungen
Zum Einbinden von anderen Dateien, welche PHP-Code enthalten, können die Kontrollstrukturen include und require verwendet werden. Die Syntax ist vergleichbar zu „echo”:
// fuer include: include 'dateiname.php'; // fuer require: require 'dateiname.php';
Es können sowohl absolute als auch relative Pfade angegeben werden. Wird gar kein Pfad angegeben, dann wird nach der Datei zunächst im Pfad unter include_path gesucht, danach im Verzeichnis der Datei, die das include/require enthält.
Im Gegensatz zu anderen Sprachen müssen include und require nicht zwangsweise am Anfang der Datei stehen. Auch die Platzierung mitten im Code ist erlaubt. Ebenso müssen die eingebundenen Dateien nicht zwangsweise Klassen enthalten, sondern können auch prozeduralen Code beherbergen, der dann sofort ausgeführt wird.
Um zu verhindern, dass Dateien mehrfach eingebunden werden kann auf include_once und require_once zurückgegriffen werden, welche jeweils eine Datei nur maximal ein Mal einladen, egal wie oft sie aufgerufen werden.
1.1. Unterschied zwischen include und require
Der Unterschied zwischen include und require liegt einzig in ihrem Verhalten falls die angegebene Datei nicht gefunden werden kann. Sollte dies passieren beendet require sofort die Skriptausführung, während include nur eine Warnung erzeugt und den weiteren Code ausführt. Tendenziell wird include häufiger verwendet, je nach Anwendungsgebiet kann aber auch require sinnvoll sein.
Kontrollstruktur | Falls Datei nicht gefunden wird |
include | Warnung |
require | Fatal Error (Skript wird beendet) |
2. Beispiele
2.1. Eine ausgelagerte Ausgabe
Eine Beispieldatei in die etwas Code ausgelagert wurde:
<?php // ausgelagert.php echo("Diese Nachricht stammt aus ausgelagert.php \n"); ?>
Verwendung des Codes:
<?php // test.php echo("Diese Nachricht stammt aus test.php \n"); include 'ausgelagert.php'; require 'ausgelagert.php'; ?>
Diese Nachricht stammt aus test.php Diese Nachricht stammt aus ausgelagert.php Diese Nachricht stammt aus ausgelagert.php
Wie zu sehen, müssen includes/requires nicht zwangsweise am Anfang der Datei stehen.
2.2. Funktion aus einer anderen Datei einbinden
Eine Beispieldatei mit einer Funktion, welche die Zahlen von 1 bis 10 ausgibt:
<?php // myfunction.php function echoOneToTen() { for ($x=0; $x<10; $x++) { echo($x . "\n"); } } ?>
Diese Datei (test.php) bindet die vorherige Funktion über ein include ein:
<?php // test.php include 'myfunction.php'; echo("Alle Zahlen von 0 bis 10: \n"); echoOneToTen(); ?>
Ausgabe von test.php:
Alle Zahlen von 0 bis 10: 0 1 2 3 4 5 6 7 8 9
2.3. Eine Klasse aus einer anderen Datei includen
Eine Beispieldatei mit einer einfachen Klasse:
<?php // HelloWorld.php class HelloWorld { public function hello() { echo("Hello World from class HelloWorld! \n"); } } ?>
Nun wird diese Klasse in einer ganz anderen Datei verwendet:
<?php // test.php include 'HelloWorld.php'; $hw = new HelloWorld(); $hw->hello(); ?>
Ausgabe von test.php:
Hello World from class HelloWorld!
2.4. include vs include_once
Insbesondere wenn man Funktionen oder Klassen einbindet, können include_once und require_once hilfreich sein, um Fehler durch mehrmaliges Einladen der Datei zu unterbinden.
Eine Beispieldatei mit einer leeren Klasse:
<?php // Example.php class Example { } ?>
Mehrmaliges Einladen der Klasse mit include:
<?php // test.php include 'Example.php'; include 'Example.php'; echo("ende erreicht"); ?>
Ausgabe von test.php:
Fatal error: include() [<a href='function.include'>function.include</a>]: Cannot redeclare class example in test.php on line 4
Da die Klasse mehrmals eingeladen und damit definiert wird, entsteht ein Fatal Error. Mit include_once lässt sich das vermeiden.
<?php // test.php include_once 'Example.php'; include_once 'Example.php'; echo("ende erreicht"); ?>
ende erreicht
2.5. include vs require
Nachfolgend wird der Unterschied zwischen include und require dargestellt. Während include nur eine Warnung erzeugt falls die angegebene Datei nicht gefunden wird, bricht require den kompletten Ablauf des Skripts mit einem Fatal Error ab.
Verhalten bei include, falls die Datei nicht gefunden wird:
<?php // test.php // alle eventuallen Fehler anzeigen error_reporting(E_ALL); // eine nicht existierende Datei einbinden include 'existiert_nicht.php'; echo("ende erreicht"); ?>
<br /> <b>Warning</b>: include(existiert_nicht.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in <b>...\test.php</b> on line <b>8</b><br /> <br /> <b>Warning</b>: include() [<a href='function.include'>function.include</a>]: Failed opening 'existiert_nicht.php' for inclusion (include_path='.') in <b>...\test.php</b> on line <b>8</b><br /> ende erreicht
Verhalten bei require, falls die Datei nicht gefunden wird:
<?php // test.php // alle eventuallen Fehler anzeigen error_reporting(E_ALL); // eine nicht existierende Datei einbinden require 'existiert_nicht.php'; echo("ende erreicht"); ?>
<br /> <b>Warning</b>: require(existiert_nicht.php) [<a href='function.require'>function.require</a>]: failed to open stream: No such file or directory in <b>...\test.php</b> on line <b>8</b><br /> <br /> <b>Fatal error</b>: require() [<a href='function.require'>function.require</a>]: Failed opening required 'existiert_nicht.php' (include_path='.') in <b>...\test.php</b> on line <b>8</b><br />