# 4.4.5 Einbetten von Programmteilen

Zum Einbinden von PHP-Teilen verwendet man `include` oder `require`. Hiermit wird genau an der Stelle im PHP-Code der Inhalt einer externen Datei eingebunden. Stehen `include` oder `require` innerhalb einer Funktion, so gilt der gesamte eingebundene Code auch nur im Inneren dieser Funktion.

Welche Daten werden typischerweise in externe Dateien ausgelagert?

- Konfigurationsdateien
- Klassen (gut erkennbar daran, dass die Klassennamen mit einem Großbuchstaben anfangen)
- Dateien, die HTML-Syntax z.B. für Header oder Footer enthalten

Alle einzubindenden Dateien sollte PHP-Sourcecode enthalten und als Dateityp `.php` bekommen.

Die Tabelle unten bietet eine Übersicht über die Funktionen und deren Erklärung:

Funktion | Erklärung
--- | ---
`include` | Liest eine Datei ein und wertet diese aus. Es wird eine Warnung ausgegeben, wenn die Datei nicht eingelesen werden kann.
`require` | Liest eine Datei ein. Das Programm wird abgebrochen, wenn die Datei nicht eingelesen werden kann (Fatal Error).
`include_once` bzw. `require_once` | Einmal eingebundener Code wird nicht nochmals eingebunden.

Anstelle von `include 'pfad/dateiname.php'` können auch Klammern `include('pfad/dateiname.php')` verwendet werden. Dies ist jedoch eine ältere Schreibweise und kommt aus einer Zeit, in der `include`, `require` sowie `include_once` und `require_once` als PHP-Funktionen betrachtet wurden.

Typischerweise verwendet man `require_once` zum Einbinden von Klassen und `include` für Programmteile, die nicht unbedingt im Programmablauf benötigt werden. Wenn man sich unsicher ist, welchen der vier Befehle zum Einbinden man nutzen sollte, dann ist `require_once` zu empfehlen.

    1
    2
    3
    <?php
    require_once './conf/config.php';
    require_once './class/HtmlInput.php';

Profitipp: Systemunabhängig funktioniert nachfolgende Syntax, welche die Nutzung von `DIRECTORY_SEPARATOR` beinhaltet, um den korrekten Pfadtrenner für das Betriebssystem zu verwenden.

    1
    2
    3
    4
    5
    <?php
    $incPath   = __DIR__.DIRECTORY_SEPARATOR.'conf'.DIRECTORY_SEPARATOR;
    $classPath = __DIR__.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR;
    require_once $incPath.'config.php';
    require_once $classPath.'HtmlInput.php';