Unterschied zwischen require, include, require_once und include_once?

1213

In PHP:

  • Wann soll ich requirevs. include?
  • Wann soll ich require_oncevs. include_once?
Scott B.
quelle
3
PHP CodeSniffer sagt, wenn Datei bedingt eingeschlossen wird, verwenden Sie include_once (anstelle von require_once).
Farhad

Antworten:

1426

Es gibt requireund include_onceauch.

Ihre Frage sollte also sein ...

  1. Wann soll ich requirevs. include?
  2. Wann sollte ich require_oncevs.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).

Löwe
quelle
58
Beachten Sie, dass require () schneller ausgeführt wird als require_once (). Wenn Sie also sicher sind, dass keine doppelten Includes vorhanden sind, verwenden Sie require ().
Dialex
48
@DiAlex, require_once ist langsamer, aber fast nicht messbar.
Prof. Falken Vertrag verletzt
77
@ DiAlex ... und wenn sich herausstellt, dass die Datei tatsächlich bereits enthalten ist, require_once()wird die schnellere der beiden sein
Tom
11
@ Prof.Falken Unter welchen Umständen muss man dieselbe Datei mehr als einmal benötigen? Ich kann mir in meiner aktuellen Denkweise keine vorstellen.
Weishi Zeng
17
@WeishiZeng für Webseiten gibt es möglicherweise HTML-Snippets, die Sie mehrmals einschließen möchten.
James Beninger
406

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.

Gordon
quelle
Ich habe eine PDO-Verbindung (zur Datenbank) . Soll ich welche verwenden? include? include_once? require? require_once?
Shafizadeh
6
Dies sollte die akzeptierte Antwort sein, da sie die Frage kurz beantwortet und auf das offizielle Handbuch verweist, anstatt auf die andere Antwort, die nur w3schools verknüpft.
Daniel W.
9
Geben Sie mir einen Grund, warum Sie es aufnehmen würden, wenn es nicht notwendig ist?
Francisco Ochoa
1
Ich verwende eine Vorlage für ein generisches Seitenlayout mit Abschnitten wie Kopf-, Spalten- und Fußzeilen usw. Dadurch kann ich diese Vorlage für jede Seite auf der Site bereitstellen und muss nur Dateien in der Seitenordnerstruktur erstellen, die definieren, was sollte in jede dieser Positionen gehen. Wenn ich beschließe, dass eine Seite keine Seitenleiste benötigt, lasse ich diese Datei einfach im Ordner für diese Seite weg und die Vorlage funktioniert immer noch einwandfrei, ohne dass diese Datei vorhanden ist.
James Coyle
301

Mein Vorschlag ist, nur require_once99,9% der Zeit zu verwenden.

Die Verwendung von requireoder includeimpliziert 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 .

Kzqai
quelle
41
+1 Dies sollte die akzeptierte Antwort sein. Die wichtigsten Punkte sind, dass die includeFamilie 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_onceund verwenden requiresollten, require_oncewenn Sie Dateien einschließen, die Funktionen oder Klassen definieren an anderer Stelle verwendet oder Singletons wie Datenbankverbindungsobjekte instanziiert und requirezum 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.
Mark Amery
7
+1 (habe ein weiteres goldenes Abzeichen;)) require_onceStimmen 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 requiresicherstellt, 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 _onceschü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.
James
Hey, ich habe eine Datei, die manchmal in der Indexseite enthalten ist, und die Mannzeit wird direkt aufgerufen (home.php). Jetzt habe ich bereits eine Konfigurationsdatei auf der Indexseite mit der Funktion "require" eingefügt. Kann ich require_once verwenden? in home.php zu verhindern, dass wieder aufgenommen wird
Ravinder Payal
@ RavinderPayal Nun, mein erster Rat ist, sich mit einem Front-Controller Kopfschmerzen zu ersparen! Nur weil ein Benutzer example.com/home anruft, heißt das nicht, dass Sie eine völlig separate home.php haben sollten! Stattdessen sollte / home / nur durch den Front-Controller von index.php oder front.php geleitet werden. Nur PHP erlaubt wirklich den Oldschool-Ansatz "Ein Skript pro Seite" mehr und vertraue mir, es ist nicht der beste Weg. Wenn Sie jedoch eine separate Datei home.php und index.php haben MÜSSEN, sollte sich alles, was in beide Richtungen gehen kann, in einer Bibliotheksdatei oder -vorlage befinden, ../templates/home.tpl oder ../view/home.view.php Wissen Sie?
Kzqai
Sein SNS und ich wählen zunächst einen Dateiseitenansatz für eine einfache Entwicklung und es ist ein großer Stapel von Dateien, die ich nicht neu erstellen kann. Jetzt habe ich dieses Problem gelöst und der andere Grund, eine Datei auf einer Seite zu erstellen, ist die Geschwindigkeit und der geringere Kontakt mit der Festplatte abnehmende Anzahl von Includes
Ravinder Payal
36

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.

Sebastian
quelle
1
Wow kurz und einfach!
Vlad
31

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_ERRORund 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:

Polynom
quelle
22

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.

AliMohsin
quelle
"Beispiel besser als Rat"
Ramesh Kithsiri HettiArachchi
19

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.

mo.
quelle
18

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 .

Tiberiu-Ionuț Stan
quelle
16

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_onceAutoloader-Klasse hauptsächlich nur einmal (Composer Autoloader häufig) und lädt alle Ihre Klassen und Funktionen (Funktionsdateien müssen explizit zur composer.jsonDatei hinzugefügt werden, um in allen anderen Dateien verfügbar zu sein). Wenn Ihre Klasse aus irgendeinem Grund nicht vom Autoloader require_oncegeladen 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_oncevon 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 includeund include_oncewirklich.

PHPst
quelle
+1 für die Erwähnung des Autoloaders. Dieser letzte Satz ist jedoch umstritten. Sehr oft verwenden Sie einen include()in einen Ausgabepuffer eingeschlossenen, um Ihre Template-Engine zu implementieren.
Haz
Angesichts moderner Texteditoren und moderner PHP- require()Dateien verwendet fast niemand das Teilen großer Dateien.
Haz
Ich hatte das gleiche Problem bei der Verwendung require_oncevon PHPMailer in einer Funktion, und mein Autoloader definiert die $mailspäter im Code benötigte Variable, sodass die nächste require_onceignoriert wird, die $mailnicht initialisiert wurde! Die Lösung bestand darin, sie einfach requirenach dem Funktionsaufruf zu verwenden.
Youssef
@haz Gibt es einen Grund, den Sie requirein diesen Fällen nicht verwenden ?
PHPst
@ChristofferBubach LOL.
PHPst
15

Der Unterschied liegt in dem Fehler, den die Befehle erzeugen. Mit requirewird die Datei, die Sie verwenden möchten, wirklich benötigt und generiert somit eine, E_ERRORwenn sie nicht gefunden wird.

require()ist identisch mit, include() außer dass bei einem E_ERROR Fehler auch ein schwerwiegender Pegelfehler auftritt.

includegeneriert nur dann einen E_WARNINGFehler, 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()

Felix Kling
quelle
requiregibt E_COMPILE_ERROR an, nicht E_ERROR.
Yousha Aleayoub
Sieht so aus, als hätte es sich in den letzten 7 Jahren geändert.
Felix Kling
9

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.

Brian
quelle
8

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.

Ihr gesunder Menschenverstand
quelle
7

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.

require_once / include_once

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).

Marcx
quelle
5

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.

Rukmi Patel
quelle
5

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.

pcj
quelle
4

Aus dem Handbuch :

require()ist identisch mit, include()außer dass bei einem E_COMPILE_ERRORFehler auch ein schwerwiegender Pegelfehler auftritt. Mit anderen Worten, das Skript wird angehalten, während include()nur eine Warnung ( E_WARNING) ausgegeben wird, mit der das Skript fortgesetzt werden kann.

Gleiches gilt für die _once()Varianten.

Ferdinand Beyer
quelle
4

Im Zeitalter von PSR-0 / PSR-4Autoloadern 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_onceselbst in Ihrer Bootstrap-Datei und Ihren includeVorlagen automatisch laden, wenn Sie dies tun benutze immer noch PHP als Template Engine).

mp31415
quelle
3

 

  1. Wann sollte man verwenden requireoder include?

    Die Funktionen requireund includeführen dieselbe Aufgabe aus, dh sie schließen die angegebene Datei ein und werten sie aus. Der Unterschied besteht requirejedoch darin, dass ein schwerwiegender Fehler verursacht wird, wenn der angegebene Dateispeicherort ungültig ist oder ein Fehler vorliegt, während includeeine Warnung generiert und die Codeausführung fortgesetzt wird.

    Sie können die requireFunktion 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 includeFunktion 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 requireFunktion überall in Ihrem Code zu verwenden, während sie sich in der Entwicklungsphase befindet, sodass Sie Code debuggen und später alle requireFunktionen durch includeFunktionen 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 ...

  2. Wann sollte man verwenden require_onceoder require?

    Der grundlegende Unterschied zwischen requireund require_onceis require_onceprüft, ob die Datei bereits enthalten ist oder nicht, wenn sie bereits enthalten ist. Dann wird die Datei nicht enthalten, während die requireFunktion 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 requireFunktion. Wenn Sie Code nur einmal in Ihren Code aufnehmen möchten, verwenden Sie diese Funktion require_once.

Akshay Khale
quelle
2
  1. Verwenden Sie die Funktion require , wenn Sie eine Klasse, Funktion oder Abhängigkeit laden müssen.

  2. 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.

James Wong
quelle
1

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.

Joshua Charles Pickwell
quelle
1

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();
}
SwiftNinjaPro
quelle
0

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.

Rotimi
quelle
0

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.

Adam Winter
quelle
-1

requirehat einen höheren Overhead als include, da die Datei zuerst analysiert werden muss. Das Ersetzen requiresdurch includesist oft eine gute Optimierungstechnik.

Bink
quelle
2
Ich weiß, dass es ein später Kommentar ist, aber das ist eigentlich nicht wahr. requireanalysiert die Datei nicht mehr als include. Die _onceVersionen dieser Funktionen haben jeweils einen gewissen Overhead, aber wie andere gesagt haben, ist er in den meisten Anwendungen nahezu vernachlässigbar.
ahouse101
-2

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 ...

Ruke GiPyeong Lee
quelle