Require_once vs. Include in PHP

Olorunfemi Akinlua 30 Januar 2023
  1. Wann man die Schlüsselwörter include vs. require in PHP verwenden sollte
  2. Wann sollten die Schlüsselwörter require_once vs. include in PHP verwendet werden?
Require_once vs. Include in PHP

Für Entwickler trennen wir während des Entwicklungszyklus verschiedene PHP-Dateien in unserem Entwicklungs- oder Produktionsverzeichnis, aber wir benötigen möglicherweise eine Funktion oder Klasse in einer anderen PHP-Datei. Es wäre kontraintuitiv und gegen den DRY-Ansatz, dieselbe Klasse oder Funktion in einer anderen Datei zu wiederholen.

Daher hat PHP vier Schlüsselwörter, um den Inhalt einer anderen PHP-Datei hinzuzufügen oder Zugriff darauf zu gewähren, include, require, include_once und require_once. In diesem Artikel betrachten wir alle Keywords, konzentrieren uns aber mehr auf require_once und include.

Wann man die Schlüsselwörter include vs. require in PHP verwenden sollte

Die Schlüsselwörter include und require kopieren den gesamten Inhalt, Text oder Code oder Markup aus der angegebenen PHP-Datei in die Ziel-PHP-Datei der Include-Anweisung. Allerdings verhält sich das Schlüsselwort include bei der Behandlung von Fehlern anders als require.

  • require erzeugt einen schwerwiegenden Fehler (E_COMPILE ERROR) und stoppt das Skript.
  • include erzeugt nur eine Warnung (E_WARNING), und das Skript wird fortgesetzt, auch wenn der nächste Abschnitt den Code aus der von Ihnen eingebundenen PHP-Datei benötigt.

Beide Schlüsselwörter sind gleich, wenn kein Fehler auftritt.

Versuchen wir, unserer aktuellen PHP-Datei eine einfache PHP-Datei (variables.php) hinzuzufügen, die einige Variablen enthält.

Die Datei variables.php:

<?php

$team = 'Golden State Warriors';
$fav_player = 'Steph Curry';

?>

Lassen Sie uns nun das Schlüsselwort include verwenden, um den Inhalt der variables.php hinzuzufügen:

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

Die Ausgabe des obigen Code-Snippets:

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

Wie Sie sehen können, gibt die erste Zeile den Inhalt der Variablen nicht aus, weil wir die Datei variables.php nicht eingebunden haben, aber sobald wir sie hinzufügen, enthält sie den Inhalt der Variablen.

Lassen Sie uns nun das Schlüsselwort require verwenden:

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

Ausgabe:

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

Es wurde die gleiche Ausgabe erzeugt. Lassen Sie uns nun die Datei variables.php in unserem Code falsch schreiben und den Effekt sehen.

Für das Schlüsselwort include:

My favourite player is and he plays for

Warning: include(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Warning: include(): Failed opening 'variable.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

My favourite player is and he plays for

Für das Schlüsselwort require:

My favourite player is and he plays for

Warning: require(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Fatal error: require(): Failed opening required 'variable.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

Sie können jetzt den Unterschied zwischen beiden sehen. Mit dem Schlüsselwort include wurde der Code weiter ausgeführt, obwohl die eingebundene Datei nicht vorhanden war, und gab nur eine Warnung aus.

Mit dem Schlüsselwort require erzeugte der Code jedoch einen schwerwiegenden Fehler und brach an dieser Stelle vollständig ab.

Wann sollten die Schlüsselwörter require_once vs. include in PHP verwendet werden?

Es gibt geeignete Bereiche, in denen include oder require verwendet werden kann. Es ist ratsamer, immer require zu verwenden; Wenn Ihre Anwendung jedoch ohne den Inhalt in der PHP-Datei auskommt, die wir der aktuellen PHP-Datei hinzufügen möchten, liegt möglicherweise kein Problem vor.

Um mehr Kontext zum Verständnis der Schlüsselwörter include, require und require_once zu geben, versuchen wir es mit einem Beispiel. Für dieses Beispiel erstellen wir eine functions.php-Datei, die eingeschlossen wird und erforderlich ist, um den Unterschied zu demonstrieren.

Die Datei functions.php:

<?php

function add_sums($a, $b) {
  return $a + $b;
}

?>

Lassen Sie uns include verwenden:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    include 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

Die Ausgabe des Codeschnipsels:

The program is done 5

Verwenden wir require:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    require 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

Die Ausgabe des Codeschnipsels:

The program is done 5

Wenn die Datei functions.php jedoch nicht verfügbar ist und wir include verwenden, wird Folgendes ausgegeben:

Warning: include(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Warning: include(): Failed opening 'functions.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

The program is starting

Fatal error: Uncaught Error: Call to undefined function add_sums() in /home/runner/Jinku/index.php:9 Stack trace: #0 {main} thrown in /home/runner/Jinku/index.php on line 9

Obwohl die functions.php nicht vorhanden war, lief der Code weiter, bis er aufgrund eines Aufrufs einer undefinierten Funktion auf einen schwerwiegenden Fehler stieß, was kein effektives Mittel zum Arbeiten in PHP-Anwendungen ist.

Wenn wir jedoch require verwenden, sieht der Fehler so aus:

Warning: require(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Fatal error: require(): Failed opening required 'functions.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

Da wir das Schlüsselwort require verwendet haben, konnten wir den schwerwiegenden Fehler aufgrund eines Aufrufs einer undefinierten Funktion verhindern. Für eher komplexe PHP-Anwendungen wird require besser geeignet sein, um Fehler schnell abfangen und unerwünschte Folgen verhindern zu können.

Gehen wir jetzt noch einen Schritt weiter. Verwenden wir das Schlüsselwort require_once:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
        // Previous code START
    require_once 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
        // Previous code ENDS

        // Additional code STARTS

    echo "Another program begins";
    require 'functions.php';
    $sum = add_sums(2,3);
    echo $sum;
    echo "Another program ends";
    ?>
  </body>
</html>

Die Ausgabe des obigen Codeausschnitts würde einen schwerwiegenden Fehler erzeugen:

The program is starting
The program is done
5
Another program begins

Fatal error: Cannot redeclare add_sums() (previously declared in /home/runner/Jinku/functions.php:3) in /home/runner/Jinku/functions.php on line 3

Das Schlüsselwort require_once prüft, ob die Datei eingebunden wurde, und falls ja, schließt sie nicht ein oder fordert sie erneut an. Da wir das Schlüsselwort require_once früher verwendet haben, verhindert es daher, dass der Code aus functions.php benötigt oder sogar eingeschlossen wird.

Möglicherweise möchten Sie dies tun, um Neudeklaration von Funktionsaufrufen oder Variablenwertzuweisungen zu verhindern, die für Ihren Code kostspielig sein können.

Wenn wir im Beispiel require zweimal verwendet haben, wird die Funktion erneut aufgerufen und der gleiche Effekt wie zuvor erzeugt, was zu einem Wert von 5 führt.

Kombinationen zu verstehen:

  • require und require_once lösen einen fatalen Fehler aus.
  • include und include_once lösen einen schwerwiegenden Fehler aus.
  • require_once und require_once werden gut funktionieren, aber der gesamte Inhalt wird abgerufen und neu deklariert.
  • include_once und include_once werden gut funktionieren, aber der gesamte Inhalt wird abgerufen und neu deklariert.
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Verwandter Artikel - PHP File