require_once()

Die require_once()-Anweisung ersetzt sich selbst durch die angegebene Datei (ähnlich der C-Preprozessor-Anweisung #include), funktioniert also ähnlich wie die require()-Anweisung. Der Hauptunterschied dazu liegt in der Tatsache, dass bei require_once() der einzubindende Code genau einmal in das Skript eingefügt wird.

Sie erzeugen beispielsweise die folgenden zwei Include-Dateien utils.inc und foolib.inc:

Beispiel 12-2. utils.inc

<?php
define(PHPVERSION, floor(phpversion()));
echo "GLOBALE SIND GUT\n";
function guterTee() {
    return "Oolong-Tee schmeckt gut!";
}
?>

Beispiel 12-3. foolib.inc

<?php
require ("utils.inc");
function zeigeVar($var) {
    if (PHPVERSION == 4) {
        print_r($var);
    } else {
        var_dump($var);
    }
}

// es folgen weiter Funktionen ...
?>
Nun schreiben Sie ein Skript cause_error_require.php:

Beispiel 12-4. cause_error_require.php

<?php
require("foolib.inc");
/* das Folgende erzeugt einen Fehler */
require("utils.inc");
$foo = array("1",array("complex","quaternion"));
echo "dies erfordert utils.inc, das auch\n";
echo "in foolib.inc erforderlich ist\n";
echo "Aufruf von guterTee: ".guterTee()."\n";
echo "Ausgabe foo: \n";
showVar($foo);
?>
Wenn Sie letzteres starten, wird folgende Ausgabe erzeugt (gilt für PHP 4.01pl2):

GLOBALE SIND GUT
GLOBALE SIND GUT

Fatal error:  Cannot redeclare causeerror() in utils.inc on line 5

Durch Umschreiben von foolib.inc und cause_errror_require.php (Gebrauch von require_once() statt require()) und Umbenennung des letzten Skriptes zu avoid_error_require_once.php haben wir nun:

Beispiel 12-5. foolib.inc (fixed)

...
require_once("utils.inc");
function showVar($var) {
...

Beispiel 12-6. avoid_error_require_once.php

...
require_once("foolib.inc");
require_once("utils.inc");
$foo = array("1",array("complex","quaternion"));
...
Beim nachfolgenden Aufruf wird folgende Ausgabe erzeugt (bei PHP 4.0.1pl2):

GLOBALE SIND GUT
dies erfordert utils.inc, das auch
in foolib.inc erforderlich ist
Aufruf von guterTee: Oolong-Tee schmeckt gut!.
Ausgabe foo:
Array
(
    [0] => 1
    [1] => Array
        (
            [0] => complex
            [1] => quaternion
        )

)

Beachten Sie, dass analog zum Verhalten von #include im C-Preprozessor diese Anweisung zur Zeit der Skript-"Compilierung" ausgewertet wird; sollten Sie also z.B. das Skript vor dessen Ausführung parsen und bei der Ausführung keinen Gebrauch machen wollen von dynamisch einzuschließenden Teilen, sollten Sie include_once() oder include() verwenden.

Weiter Beispiele zu require_once() und include_once() können Sie dem PEAR-Code entnehmen, welcher im aktuellsten PHP-Source-Code enthalten ist.

Siehe auch: require(), include(), include_once(), get_required_files(), get_included_files(), readfile(), und virtual().