Require_once vs. Include in PHP
-
Wann man die Schlüsselwörter
include
vs.require
in PHP verwenden sollte -
Wann sollten die Schlüsselwörter
require_once
vs.include
in PHP verwendet werden?
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
undrequire_once
lösen einen fatalen Fehler aus.include
undinclude_once
lösen einen schwerwiegenden Fehler aus.require_once
undrequire_once
werden gut funktionieren, aber der gesamte Inhalt wird abgerufen und neu deklariert.include_once
undinclude_once
werden gut funktionieren, aber der gesamte Inhalt wird abgerufen und neu deklariert.
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