In PHP:
- Wann soll ich
require
vs.include
? - Wann soll ich
require_once
vs.include_once
?
php
include
require
require-once
Scott B.
quelle
quelle
Antworten:
Es gibt
require
undinclude_once
auch.Ihre Frage sollte also sein ...
require
vs.include
?require_once
vs.require
Die Antwort auf 1 wird hier beschrieben .
Die Antwort auf 2 finden Sie hier .
quelle
require_once()
wird die schnellere der beiden seinVerwenden
erfordern,
wenn die Datei von Ihrer Anwendung benötigt wird, z. B. eine wichtige Nachrichtenvorlage oder eine Datei mit Konfigurationsvariablen, ohne die die App brechen würde.
require_once,
wenn die Datei Inhalte enthält, die beim späteren
function important() { /* important code */}
Einfügen einen Fehler verursachen würden, z. B. wird dies definitiv in Ihrer Anwendung benötigt, aber da Funktionen nicht erneut deklariert werden können, sollten sie nicht erneut aufgenommen werden.Einschließen, wenn die Datei nicht benötigt wird und der Anwendungsfluss fortgesetzt werden soll, wenn sie nicht gefunden wird, z. B.
ideal für Vorlagen, die auf Variablen aus dem aktuellen Bereich verweisen oder so
include_once
optionale Abhängigkeiten, die beim nachfolgenden Laden oder möglicherweise beim Einfügen von Remote-Dateien zu Fehlern führen, die aufgrund des HTTP-Overheads nicht zweimal auftreten sollen
Aber im Grunde liegt es an Ihnen, wann Sie welche verwenden.
quelle
include
?include_once
?require
?require_once
?Mein Vorschlag ist, nur
require_once
99,9% der Zeit zu verwenden.Die Verwendung von
require
oderinclude
impliziert stattdessen, dass Ihr Code nicht an anderer Stelle wiederverwendbar ist, dh, dass die Skripte, die Sie abrufen, tatsächlich Code ausführen , anstatt eine Klasse oder einige Funktionsbibliotheken verfügbar zu machen .Wenn Sie Code benötigen / einschließen, der vor Ort ausgeführt wird, ist dies prozeduraler Code, und Sie müssen ein neues Paradigma kennenlernen . Wie objektorientierte Programmierung, funktionsbasierte Programmierung oder funktionale Programmierung.
Wenn Sie bereits OO oder funktionale Programmierung durchführen, verzögert
include_once
sich die Verwendung meistens, wenn Sie Fehler im Stapel finden. Möchten Sie wissen, dass die Funktiondo_cool_stuff()
nicht verfügbar ist, wenn Sie sie später aufrufen, oder in dem Moment, in dem Sie erwarten, dass sie verfügbar ist, indem Sie die Bibliothek benötigen? Im Allgemeinen ist es am besten, sofort zu wissen, ob etwas, das Sie benötigen und erwarten, nicht verfügbar ist. Verwenden Sie es also einfachrequire_once
.Alternativ können Sie im modernen OOP Ihre Klassen bei Verwendung automatisch laden .
quelle
include
Familie normalerweise eine absolut schlechte Idee ist (da es ziemlich selten vorkommt, dass Dateien eingeschlossen werden, bei denen die Möglichkeit besteht, dass sie nicht vorhanden sind), und dass Sie diese ausrequire_once
und verwendenrequire
sollten,require_once
wenn Sie Dateien einschließen, die Funktionen oder Klassen definieren an anderer Stelle verwendet oder Singletons wie Datenbankverbindungsobjekte instanziiert undrequire
zum Einschließen von Dateien verwendet, die sofort Dinge erledigen, wenn sie aufgenommen werden. In jeder großen Webanwendung ist die letztere Art von Include ungewöhnlich.require_once
Stimmen Sie zu, dass vernünftigerweise der wahrscheinlichste Kandidat ist, der fast die ganze Zeit verwendet wird. Angesichts der geringen Overhead-Unterschiede zwischen den Auswahlmöglichkeiten, dierequire
sicherstellt, dass das Skript gestoppt wird, kann ich mir nicht viele Szenarien vorstellen, in denen eine Anwendung überleben kann, ohne dass eine Datei enthalten ist. Und_once
schützt vor Betrug. Jeder, der nicht einverstanden ist, weiß wahrscheinlich, was er tut, und kann wählen, was für die Anwendung oder das Szenario geeignet ist.Unterschied zwischen _once-Funktionen und ohne _once-Funktionen: Ohne _once-Code wird der Code wieder aufgenommen, während PHP mit _once-Funktionen die enthaltenen Dateien verfolgt und nur einmal einschließt.
Unterschied zwischen require und include: Wenn eine erforderliche Datei nicht gefunden wird, gibt PHP einen schwerwiegenden Fehler aus, während für include nur eine Warnung ausgegeben wird.
quelle
include()
gibt eine Warnung aus, wenn die Datei nicht enthalten sein kann, der Rest des Skripts jedoch ausgeführt wird.require()
wird ein werfenE_COMPILE_ERROR
und das Skript anhalten, wenn es die Datei nicht enthalten kann.Die
include_once()
undrequire_once()
Funktionen nicht enthalten die Datei ein zweites Mal , wenn es bereits aufgenommen wurde.Siehe die folgenden Dokumentationsseiten:
quelle
Wann immer Sie verwenden,
require_once()
kann in einer Datei verwendet werden, um eine andere Datei einzuschließen, wenn Sie die aufgerufene Datei nur ein einziges Mal in der aktuellen Datei benötigen. Hier im Beispiel habe ich eine test1.php.und in einer anderen Datei, die ich test2.php genannt habe
Wenn Sie das m beobachten, für das die Datei test1 zweimal erforderlich ist, die Datei jedoch die Datei test1 einmal enthält, wird dies beim zweiten Aufruf ignoriert. Und ohne anzuhalten wird die Ausgabe ein einziges Mal angezeigt.
Wann immer Sie 'include_once ()' verwenden, kann in einer Datei eine andere Datei eingefügt werden, wenn Sie die aufgerufene Datei mehr als einmal in der aktuellen Datei benötigen. Hier im Beispiel habe ich eine Datei namens test3.php.
Und in einer anderen Datei, die ich test4.php genannt habe
Während Sie das m einschließlich der test3-Datei beobachten, wird die Datei ein einziges Mal enthalten, die weitere Ausführung wird jedoch angehalten.
quelle
Verwenden Sie "include" für wiederverwendbare PHP- Vorlagen. Verwenden Sie "require" für die erforderlichen Bibliotheken.
"* _once" ist nett, weil es prüft, ob die Datei bereits geladen ist oder nicht, aber es macht nur in "require_once" Sinn für mich.
quelle
Sie sollten Klassen- und Funktionsdefinitionen in Dateien organisiert halten.
Verwenden Sie
require_once()
zum Lastabhängigkeiten (Klassen, Funktionen, Konstanten).Verwenden Sie
require()
diese Option , um vorlagenähnliche Dateien zu laden .Verwenden Sie
include_once()
diese Option , um optionale Abhängigkeiten (Klassen, Funktionen, Konstanten) zu laden .Verwenden Sie
include()
diese Option , um optionale vorlagenähnliche Dateien zu laden .quelle
Eine Antwort nach 7 Jahren für 2018
Diese Frage wurde vor sieben Jahren gestellt, und keine der Antworten bietet praktische Hilfe für die Frage. In der modernen PHP-Programmierung verwenden Sie diese
required_once
Autoloader-Klasse hauptsächlich nur einmal (Composer Autoloader häufig) und lädt alle Ihre Klassen und Funktionen (Funktionsdateien müssen explizit zurcomposer.json
Datei hinzugefügt werden, um in allen anderen Dateien verfügbar zu sein). Wenn Ihre Klasse aus irgendeinem Grund nicht vom Autoloaderrequire_once
geladen werden kann, verwenden Sie sie zum Laden.Es gibt einige Gelegenheiten, die wir nutzen müssen
require
. Wenn Sie beispielsweise eine wirklich große Array-Definition haben und diese nicht zu Ihrem Klassendefinitions-Quellcode hinzufügen möchten, können Sie:Wenn die Datei, die Sie einschließen möchten, eine ausführbare Datei enthält oder einige Variablen deklariert, die Sie fast immer verwenden müssen, wird Ihr Code nicht ausgeführt
require
, wenn Sie ihnrequire_once
von Anfang an verwenden , und / oder Ihre Variablen werden nicht stillschweigend initiiert, was zu Fehlern führt sind absolut schwer zu bestimmen.Es gibt keinen praktischen Anwendungsfall für
include
undinclude_once
wirklich.quelle
include()
in einen Ausgabepuffer eingeschlossenen, um Ihre Template-Engine zu implementieren.require()
Dateien verwendet fast niemand das Teilen großer Dateien.require_once
von PHPMailer in einer Funktion, und mein Autoloader definiert die$mail
später im Code benötigte Variable, sodass die nächsterequire_once
ignoriert wird, die$mail
nicht initialisiert wurde! Die Lösung bestand darin, sie einfachrequire
nach dem Funktionsaufruf zu verwenden.require
in diesen Fällen nicht verwenden ?Der Unterschied liegt in dem Fehler, den die Befehle erzeugen. Mit
require
wird die Datei, die Sie verwenden möchten, wirklich benötigt und generiert somit eine,E_ERROR
wenn sie nicht gefunden wird.include
generiert nur dann einenE_WARNING
Fehler, wenn er fehlschlägt und mehr oder weniger leise ist.Verwenden Sie es also, wenn die Datei erforderlich ist, damit der verbleibende Code funktioniert, und wenn das Skript fehlschlagen soll, ist die Datei nicht verfügbar.
Für
*_once()
:Gleiches gilt
require_once()
natürlich auch.Referenz:
require()
,include_once()
quelle
require
gibt E_COMPILE_ERROR an, nicht E_ERROR.Bei Bedarf muss die Datei vorhanden sein. Wenn dies nicht der Fall ist, wird ein Fehler angezeigt. Während mit include - wenn die Datei nicht existiert, wird die Seite weiter geladen.
quelle
Erfordern kritische Teile wie Autorisierung und schließen Sie alle anderen ein.
Mehrfach-Includes sind nur ein sehr schlechtes Design und müssen überhaupt vermieden werden. Also, * _once spielt eigentlich keine Rolle.
quelle
Einschließen / Erfordernis Sie können dieselbe Datei auch mehrmals einschließen:
require_once / include_once
quelle
include()
generiert eine Warnung, wenn keine Datei gefundenrequire_once()
wird, generiert jedoch einen schwerwiegenden Fehler.Eine andere Sache ist, wenn Datei vorher enthalten ist. Dann
require_once()
wird es nicht wieder aufgenommen.quelle
Ich habe die folgende Funktion verwendet:
In xyz.php wurden konstante Werte deklariert.
Ich muss diese doSomething () -Funktion aus einer anderen PHP-Skriptdatei aufrufen.
Beim Aufrufen dieser Funktion in einer Schleife habe ich jedoch ein Verhalten beobachtet. Bei der ersten Iteration erhielt doSomething () konstante Werte
xyz.php
, aber späterdoSomething()
konnte nicht jede Iteration die in deklarierten konstanten Werte abrufenxyz.php
.Ich habe mein Problem durch Umschalten von
require_once()
auf gelöst. Derinclude()
aktualisiertedoSomething()
Code lautet wie folgt:Jetzt
doSomething()
erhält jeder Iterationsaufruf, um die in definierten konstanten Werte zu erhaltenxyz.php
.quelle
Aus dem Handbuch :
Gleiches gilt für die
_once()
Varianten.quelle
Im Zeitalter von
PSR-0 / PSR-4
Autoloadern kann es völlig unnötig sein, eine der Anweisungen zu verwenden, wenn Sie lediglich einige Funktionen / Klassen für Ihren Code verfügbar machen müssen (natürlich müssen Sie sichrequire_once
selbst in Ihrer Bootstrap-Datei und Ihreninclude
Vorlagen automatisch laden, wenn Sie dies tun benutze immer noch PHP als Template Engine).quelle
Wann sollte man verwenden
require
oderinclude
?Die Funktionen
require
undinclude
führen dieselbe Aufgabe aus, dh sie schließen die angegebene Datei ein und werten sie aus. Der Unterschied bestehtrequire
jedoch darin, dass ein schwerwiegender Fehler verursacht wird, wenn der angegebene Dateispeicherort ungültig ist oder ein Fehler vorliegt, währendinclude
eine Warnung generiert und die Codeausführung fortgesetzt wird.Sie können die
require
Funktion also in dem Fall verwenden, in dem die Datei, die Sie einschließen möchten, das Herz des Systems darstellt und einen großen Einfluss auf den Rest des Codes haben kann. Sie können dieinclude
Funktion verwenden, wenn die Datei, die Sie einschließen möchten, eine ist einfache Datei mit weniger wichtigem Code.Und meine persönliche Empfehlung (für weniger wichtigen Code) ist, die
require
Funktion überall in Ihrem Code zu verwenden, während sie sich in der Entwicklungsphase befindet, sodass Sie Code debuggen und später allerequire
Funktionen durchinclude
Funktionen ersetzen können, bevor Sie ihn in die Produktion verschieben, wenn Sie ihn verpassen Fehler, die den Endbenutzer nicht betreffen, und der Rest des Codes werden ordnungsgemäß ausgeführt ...Wann sollte man verwenden
require_once
oderrequire
?Der grundlegende Unterschied zwischen
require
undrequire_once
isrequire_once
prüft, ob die Datei bereits enthalten ist oder nicht, wenn sie bereits enthalten ist. Dann wird die Datei nicht enthalten, während dierequire
Funktion die Datei enthält, unabhängig davon, ob die Datei bereits enthalten ist oder nicht.In Fällen, in denen Sie immer wieder Code einfügen möchten, verwenden Sie die
require
Funktion. Wenn Sie Code nur einmal in Ihren Code aufnehmen möchten, verwenden Sie diese Funktionrequire_once
.quelle
Verwenden Sie die Funktion require , wenn Sie eine Klasse, Funktion oder Abhängigkeit laden müssen.
Verwenden Sie die Include- Funktion, wenn Sie eine Datei im Vorlagenstil laden möchten
Wenn Sie immer noch verwirrt sind, verwenden Sie einfach require_once für alle Zeiten.
quelle
Sie sind alle Möglichkeiten, Dateien einzuschließen.
Erforderlich bedeutet, dass es benötigt wird. Require_once bedeutet, dass es benötigt wird, aber nur einmal benötigt wird. Einschließen bedeutet, dass eine Datei enthalten ist, diese jedoch nicht benötigt wird, um fortzufahren.
Beispiele:
Es gibt auch eine include_once-Funktion, die eine Datei einmal enthält.
Verwenden Sie keine Großbuchstaben, wenn ich von meinem Telefon aus tippe.
quelle
Eines ist mir aufgefallen: Wenn ich include verwende, kann ich nur über die Datei, die es enthält, auf die Funktionen der enthaltenen Dateien zugreifen. Mit require_once kann ich diese Funktion in einer zweiten erforderlichen_once-Datei ausführen.
auch: Ich empfehle hinzuzufügen
Denn wenn require_once die Seite beendet, wird manchmal das Verzeichnis Ihrer Website-Dateien wiedergegeben
Hier ist eine benutzerdefinierte Funktion, die ich erstellt habe, um Dateien zu benötigen:
Anwendungsbeispiel:
quelle
Wenn Sie einen falschen Pfad benötigen, gibt PHP einen schwerwiegenden Fehler aus und die Funktion zum Herunterfahren wird aufgerufen. Wenn Sie jedoch einen falschen Pfad angeben, setzt PHP die Ausführung fort, zeigt jedoch nur eine Warnung an, dass die Datei nicht vorhanden ist.
Aus dem englischen Wort require wird PHP mitgeteilt, dass die Ausführung der Seite oder Datei von der erforderlichen Datei abhängt.
Nach meiner Erfahrung ist es normal, wichtige Dateien wie Konfigurationsdateien, Datenbankklassen und andere wichtige Dienstprogramme zu benötigen.
quelle
Es kommt oft darauf an, ob Sie eine Clientbibliothek unter bestimmten Bedingungen laden möchten oder ob Sie sie laden möchten, ob Sie sie verwenden möchten oder nicht.
Hier ist ein konkretes Beispiel; Ausarbeiten, was PCJ sagte.
Angenommen, Sie haben eine Konfigurationsdatei, in der Ihr Datenbankbenutzername und Ihr Kennwort (conf.php) gespeichert sind:
Und eine Klasse mit einer statischen Funktion, die die Datenbank verwendet:
Und diese statische Funktion wird innerhalb einer anderen Funktion verwendet, die iterativ innerhalb einer Schleife aufgerufen wird:
Sie können die Klasse nur einmal anfordern / einschließen. Wenn Sie es bei jeder Iteration Ihrer Schleife benötigen / einschließen, wird eine Fehlermeldung angezeigt. Sie müssen Ihre conf-Datei jedoch jedes Mal einschließen, wenn die statische Funktion aufgerufen wird.
Das Verschieben außerhalb der Funktion könnte natürlich eine Lösung für dieses Problem sein:
Es sei denn, Sie befassen sich mit dem Aufwand für das Laden einer Klasse, die möglicherweise nur unter bestimmten Bedingungen verwendet wird, und möchten sie nicht laden, wenn dies nicht der Fall ist.
quelle
require
hat einen höheren Overhead alsinclude
, da die Datei zuerst analysiert werden muss. Das Ersetzenrequires
durchincludes
ist oft eine gute Optimierungstechnik.quelle
require
analysiert die Datei nicht mehr alsinclude
. Die_once
Versionen dieser Funktionen haben jeweils einen gewissen Overhead, aber wie andere gesagt haben, ist er in den meisten Anwendungen nahezu vernachlässigbar.Verwenden Sie einfach erfordern und einschließen.
Denn überlegen Sie, wie Sie mit include_once oder require_once arbeiten sollen. Das ist auf der Suche nach Protokolldaten, die enthaltene oder erforderliche PHP-Dateien speichern. Das ist also langsamer als einschließen und erfordern.
Einfach so benutzen ...
quelle