PHP Handbuch
Zurück | Kapitel 11. Kontroll-Strukturen | Nach vorne

# 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 11-2. utils.inc
    <?php
    define(PHPVERSION, floor(phpversion()));
    echo "GLOBALE SIND GUT\n";
    function guterTee() {
        return "Oolong-Tee schmeckt gut!";
    }
    ?>

Beispiel 11-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 11-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 11-5. foolib.inc (fixed)
    ...
    require_once("utils.inc");
    function showVar($var) {
    ...

Beispiel 11-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().

Zurück | Zum Anfang | Nach vorne
include() | Nach oben | include_once()