2010-09-02 10 views
11

Ich kenne die grundlegende Verwendung von PHP erfordern, einmalig, include und include einmal. Aber ich bin verwirrt darüber, wann ich sie benutzen sollte.Was ist der Unterschied zwischen PHP erforderlich und enthalten?

Beispiel: Ich habe 3 Dateien, zB: settings.php, database.php und index.php.

In database.php Datei, ich schrieb:

require_once 'settings.php'; 

und dann in index.php, ich schrieb:

require_once 'settings.php'; 
require_once 'database.php'; 

so lade ich settings.php zwei mal, ist das in Ordnung? Irgendwelche Tipps mit diesen Funktionen?

+0

Fragen wie diese sollten nicht Community-Wiki sein.Keine große Sache, nur als Hinweis für die Zukunft –

+0

thx für Informationen, ich bin ein Neuling auf dieser Seite :) – Vina

Antwort

17
  • include enthält eine Datei und wirft eine Warnung, wenn die Datei nicht gefunden wurde.

  • require enthält eine Datei und löst einen schwerwiegenden Fehler aus, wenn die Datei nicht gefunden wurde.

  • include_once und require_once das gleiche tun, aber nur , wenn die Datei nicht bereits geladen wurde.

jedoch die Notwendigkeit für eine der _once Funktionen ist in der Regel ein Zeichen für schlechtes Design. Sie sollten Ihre Skripts so erstellen, dass klar definiert wird, was an welcher Stelle enthalten ist.

Wählen Sie einen Platz für settings.php aus - wahrscheinlich index.php. Es sollte nicht notwendig sein, es zusätzlich in database.php aufzunehmen.

+8

+1. Obwohl, Nitpick/Meinung: Ich glaube nicht, dass ich stimme mit "die Notwendigkeit für eine der" _once "Funktionen ist in der Regel ein Zeichen für schlechtes Design". Autoloader machen schließlich das Gleiche. Ich würde sagen, '_once' sollte immer für Dateien verwendet werden, die nur Funktion/Klasse/Konstante Deklarationen enthalten, und die anderen für Skript-Snippets. In diesem Fall würde ich sagen, dass * nicht * mit '_once' normalerweise [!] Ein Zeichen für schlechtes Design ist. '_once' (in Abwesenheit eines Autoloaders) ermöglicht eine anständige Modularität Ihres Codes. (In diesem speziellen Fall würde ich zustimmen, dass es nur einmal an erster Stelle enthalten sein sollte.) – pinkgothic

+1

@pinkgothic Ich muss nicht zustimmen. Autoloader arbeiten nach dem gleichen Prinzip, * aber * wenn sie ihr Geld wert sind, führen sie eine 'class_exists()' Prüfung durch, bevor sie ein Include versuchen. Nach meiner Erfahrung (lesen, auch * eigene * Erfahrung!) 'Require_once()' * normalerweise * bedeutet "Ich bin mir nicht sicher, ob diese Datei bereits an einem anderen Punkt enthalten ist, weil ich die Struktur meines Projekts nicht vollständig verstanden habe . " Soweit ich sehen kann, kann jede andere Verwendung von '_once' verhindert werden, indem geprüft wird, ob die Ressource, die ich gerade aufnehmen möchte, bereits vorhanden ist - sei es eine Funktion oder eine Klasse. –

+0

Das heißt, ich bin mir sicher, dass es legitime Fälle gibt, in denen ein '_once' einfach die schnellere und schnellere Lösung ist. –

2

Sie laden settings.php nicht zweimal, wie PHP documentation on require_once;

Die require_once() Aussage ist identisch mit require() außer PHP prüft, ob die Datei bereits enthalten gewesen ist, und wenn ja, nicht enthalten (erforderlich) wieder.

0

require_once würde prüfen, ob die Datei bereits enthalten ist und nicht wieder enthalten, also keine Sorge, es wird settings.php nicht zweimal laden.

0

wenn die Datei wichtig ist, ich glaube, Sie sollten „require“ verwenden,
aber wenn nicht, ich sind immer verwenden, wie peka des beantwortet
erfordern eine Datei enthält und wirft einen fatalen Fehler, wenn die Datei nicht gefunden wurde .

-2

include_once und require_once in PHP verwenden, um eine Seite zu einer anderen Seite hinzuzufügen Beispiel: Sie möchten die Datenbankverbindungsseite hinzufügen conn.php in der Bearbeitungsseite edit.php können Sie sie verwenden. Es gibt jedoch Unterschiede zwischen include_once und require_once, wenn die Funktion include_once einen Fehler erhält, der Sie warnt und den Code ausführt, aber die Funktion require_once einen Fehler findet, der das Skript stoppt und den Code nicht ausführt.

Verwandte Themen