In PHP:
- Wann soll ich
require
vs.include
? - Wann soll ich
require_once
vs.include_once
?
In PHP:
require
vs. include
?require_once
vs. include_once
?Antworten:
Es gibt require
und include_once
auch.
Ihre Frage sollte also sein ...
require
vs. include
?require_once
vs.require
Die Antwort auf 1 wird hier beschrieben .
Die Funktion require () ist identisch mit include (), außer dass Fehler unterschiedlich behandelt werden. Wenn ein Fehler auftritt, generiert die include () - Funktion eine Warnung, das Skript setzt jedoch die Ausführung fort. Das require () generiert einen schwerwiegenden Fehler und das Skript wird gestoppt.
Die Antwort auf 2 finden Sie hier .
Die Anweisung require_once () ist identisch mit require (), außer dass PHP prüft, ob die Datei bereits enthalten ist, und wenn ja, sie nicht erneut einschließt (erfordert).
require_once()
wird die schnellere der beiden sein
Verwenden
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.
include
? include_once
? require
? require_once
?
Mein Vorschlag ist, nur require_once
99,9% der Zeit zu verwenden.
Die Verwendung von require
oder include
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ögertinclude_once
sich die Verwendung meistens, wenn Sie Fehler im Stapel finden. Möchten Sie wissen, dass die Funktion do_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 einfach require_once
.
Alternativ können Sie im modernen OOP Ihre Klassen bei Verwendung automatisch laden .
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 aus require_once
und verwenden require
sollten, require_once
wenn Sie Dateien einschließen, die Funktionen oder Klassen definieren an anderer Stelle verwendet oder Singletons wie Datenbankverbindungsobjekte instanziiert und require
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, die require
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.
include()
gibt eine Warnung aus, wenn die Datei nicht enthalten sein kann, der Rest des Skripts jedoch ausgeführt wird.
require()
wird ein werfen E_COMPILE_ERROR
und das Skript anhalten, wenn es die Datei nicht enthalten kann.
Die include_once()
und require_once()
Funktionen nicht enthalten die Datei ein zweites Mal , wenn es bereits aufgenommen wurde.
Siehe die folgenden Dokumentationsseiten:
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.
<?php
echo "today is:".date("Y-m-d");
?>
und in einer anderen Datei, die ich test2.php genannt habe
<?php
require_once('test1.php');
require_once('test1.php');
?>
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.
<?php
echo "today is:".date("Y-m-d");
?>
Und in einer anderen Datei, die ich test4.php genannt habe
<?php
include_once('test3.php');
include_once('test3.php');
?>
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.
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 .
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 zur composer.json
Datei hinzugefügt werden, um in allen anderen Dateien verfügbar zu sein). Wenn Ihre Klasse aus irgendeinem Grund nicht vom Autoloader require_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:
<?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php'
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 ihn require_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
und include_once
wirklich.
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ächste require_once
ignoriert wird, die $mail
nicht initialisiert wurde! Die Lösung bestand darin, sie einfach require
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.
require()
ist identisch mit,include()
außer dass bei einemE_ERROR
Fehler auch ein schwerwiegender Pegelfehler auftritt.
include
generiert nur dann einen E_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()
:
include_once()
kann in Fällen verwendet werden, in denen dieselbe Datei während einer bestimmten Ausführung eines Skripts mehrmals enthalten und ausgewertet werden kann. In diesem Fall kann dies dazu beitragen, Probleme wie Funktionsneudefinitionen, Neuzuweisungen von Variablenwerten usw. zu vermeiden.
Gleiches gilt require_once()
natürlich auch.
Referenz: require()
,include_once()
require
gibt E_COMPILE_ERROR an, nicht E_ERROR.
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.
Einschließen / Erfordernis Sie können dieselbe Datei auch mehrmals einschließen:
require () ist identisch mit include (), außer dass bei einem Fehler auch ein schwerwiegender E_COMPILE_ERROR-Level-Fehler auftritt. Mit anderen Worten, das Skript wird angehalten, während include () nur eine Warnung (E_WARNING) ausgibt, mit der das Skript fortgesetzt werden kann.
ist identisch mit include / require, außer dass PHP prüft, ob die Datei bereits enthalten ist, und wenn ja, sie nicht erneut einschließt (erfordert).
include()
generiert eine Warnung, wenn keine Datei gefunden require_once()
wird, generiert jedoch einen schwerwiegenden Fehler.
Eine andere Sache ist, wenn Datei vorher enthalten ist. Dann require_once()
wird es nicht wieder aufgenommen.
Ich habe die folgende Funktion verwendet:
function doSomething() {
require_once(xyz.php);
....
}
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äter doSomething()
konnte nicht jede Iteration die in deklarierten konstanten Werte abrufen xyz.php
.
Ich habe mein Problem durch Umschalten von require_once()
auf gelöst. Der include()
aktualisierte doSomething()
Code lautet wie folgt:
function doSomething() {
include(xyz.php);
....
}
Jetzt doSomething()
erhält jeder Iterationsaufruf, um die in definierten konstanten Werte zu erhalten xyz.php
.
Aus dem Handbuch :
require()
ist identisch mit,include()
außer dass bei einemE_COMPILE_ERROR
Fehler auch ein schwerwiegender Pegelfehler auftritt. Mit anderen Worten, das Skript wird angehalten, währendinclude()
nur eine Warnung (E_WARNING
) ausgegeben wird, mit der das Skript fortgesetzt werden kann.
Gleiches gilt für die _once()
Varianten.
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 sich require_once
selbst in Ihrer Bootstrap-Datei und Ihren include
Vorlagen automatisch laden, wenn Sie dies tun benutze immer noch PHP als Template Engine).
Wann sollte man verwenden require
oder include
?
Die Funktionen require
und include
führen dieselbe Aufgabe aus, dh sie schließen die angegebene Datei ein und werten sie aus. Der Unterschied besteht require
jedoch darin, dass ein schwerwiegender Fehler verursacht wird, wenn der angegebene Dateispeicherort ungültig ist oder ein Fehler vorliegt, während include
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 die include
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 alle require
Funktionen durch include
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
oder require
?
Der grundlegende Unterschied zwischen require
und require_once
is require_once
prüft, ob die Datei bereits enthalten ist oder nicht, wenn sie bereits enthalten ist. Dann wird die Datei nicht enthalten, während die require
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 Funktion require_once
.
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.
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:
Require 'filename'
Require_once 'filename'
Include 'filename'
Es gibt auch eine include_once-Funktion, die eine Datei einmal enthält.
Include_once 'filename'
Verwenden Sie keine Großbuchstaben, wenn ich von meinem Telefon aus tippe.
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
if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
}
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:
function addFile($file, $type = 'php', $important=false){
//site-content is a directory where I store all the files that I plan to require_once
//the site-content directory has "deny from all" in its .htaccess file to block direct connections
if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
//!is_dir checks that the file is not a folder
require_once('site-content/'.$file.'.'.$type);
return 'site-content/'.$file.'.'.$type;
}else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
//if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
require_once('site-content/'.$file);
return 'site-content/'.$file;
}else if($important){
//if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
die('Server Error: Files Missing');
return false;
}else{
//the function returns false if the file does not exist, so you can check if your functions were successfully added
return false;
}
}
Anwendungsbeispiel:
$success = addFile('functions/common');
if($success){
commonFunction();
}else{
fallbackFunction();
}
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.
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:
<?php
//my site configuration file
//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>
Und eine Klasse mit einer statischen Funktion, die die Datenbank verwendet:
<?php
class UsedInLoop {
public static function databaseQuery(){
require(/path/to/conf.php); //require_once will not work here
$db = new mysqli($location, $dbuser, $userpw, $database);
//yada yada yada
}
}
?>
Und diese statische Funktion wird innerhalb einer anderen Funktion verwendet, die iterativ innerhalb einer Schleife aufgerufen wird:
<?php
require_once('path/to/arbitraryObject.php'); //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
$obj->myFunction();
}
?>
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.
<?php
class arbitraryObject {
public function myFunction(){
require_once(/path/to/UsedInLoop.php); //This must be require_once. require() will not work
UsedInLoop::databaseQuery();
}
}
?>
Das Verschieben außerhalb der Funktion könnte natürlich eine Lösung für dieses Problem sein:
<?php
require(/path/to/UsedInLoop.php); //now require() is fine
class arbitraryObject {
public function myFunction(){
UsedInLoop::databaseQuery();
}
}
?>
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.
require
hat einen höheren Overhead als include
, da die Datei zuerst analysiert werden muss. Das Ersetzen requires
durch includes
ist oft eine gute Optimierungstechnik.
require
analysiert die Datei nicht mehr als include
. 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.
if (!defined(php)) {
include 'php';
define(php, 1);
}
Einfach so benutzen ...