Andere PHP-Dateien importieren

Wie Code aus anderen PHP-Dateien eingeladen werden kann

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”:

PHP-Code

// 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-Code: ausgelagert.php

<?php

	// ausgelagert.php

	echo("Diese Nachricht stammt aus ausgelagert.php \n");

?>



Verwendung des Codes:

PHP-Code

<?php

	// test.php

	echo("Diese Nachricht stammt aus test.php \n");

	include 'ausgelagert.php';

	require 'ausgelagert.php';

?>



HTML-Code: Ausgabe

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-Code: myfunction.php

<?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-Code: test.php

<?php

	// test.php

	include 'myfunction.php';

	echo("Alle Zahlen von 0 bis 10: \n");

	echoOneToTen();

?>



Ausgabe von test.php:

HTML-Code: Ausgabe

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-Code: HelloWorld.php

<?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-Code: test.php

<?php

	// test.php

	include 'HelloWorld.php';

	$hw = new HelloWorld();

	$hw->hello();

?>



Ausgabe von test.php:

HTML-Code: Ausgabe

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-Code: Example.php

<?php

	// Example.php

	class Example { }

?>



Mehrmaliges Einladen der Klasse mit include:

PHP-Code: test.php

<?php

	// test.php

	include 'Example.php';

	include 'Example.php';

	echo("ende erreicht");

?>



Ausgabe von test.php:

HTML-Code: Ausgabe

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-Code: test.php

<?php

	// test.php

	include_once 'Example.php';

	include_once 'Example.php';

	echo("ende erreicht");

?>



HTML-Code: Ausgabe

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-Code: test.php

<?php

	// test.php



	// alle eventuallen Fehler anzeigen

	error_reporting(E_ALL);



	// eine nicht existierende Datei einbinden

	include 'existiert_nicht.php';



	echo("ende erreicht");

?>



HTML-Code: Ausgabe

<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-Code

<?php

	// test.php



	// alle eventuallen Fehler anzeigen

	error_reporting(E_ALL);



	// eine nicht existierende Datei einbinden

	require 'existiert_nicht.php';



	echo("ende erreicht");

?>



HTML-Code: Ausgabe

<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 />