Wenn es um PHP geht, lieben viele Entwickler die Sprache, viele Entwickler hassen die Sprache, und viele Entwickler verwenden sie normalerweise nur, um ihre Arbeit zu erledigen.
Für das, was es wert ist, bin ich aus dem letzteren Lager. Ich denke PHP ist gut. Wie bei allem ist es nicht ohne Probleme, aber ich arbeite gerne genug damit und sehe es als eine Möglichkeit, Arbeit zu erledigen, verglichen mit irgendeiner Landessprache für eine Zeit der Utopie der Entwicklung.
Die Sache ist, eines der Dinge, die die Entwickler an PHP lieben - seine Funktionen und Flexibilität - sind genau die Dinge, die uns oft in die Quere kommen. Die Liste ist lang, aber in der WordPress-Welt ist die häufigste Verwirrung die richtige Art, externe Dateien einzubinden.
PHP bietet vier (!) Möglichkeiten, und WordPress bietet sogar eine eigene Variante davon an.
In diesem Artikel werden die vier Möglichkeiten beschrieben, die PHP zum Einschließen von Dateien bietet, Richtlinien für die Verwendung der einzelnen Dateien. Außerdem werden die WordPress-Funktionen zum Einschließen von Dateien beschrieben.
Im Allgemeinen bezieht sich das Einschließen von Dateien in PHP darauf, dass ein anderes Skript in den Kontext des Skripts eingefügt wird, mit dem Sie gerade arbeiten.
Sie können sich dabei vorstellen, eine Datei so zu importieren, dass die Skripts bei der Rückgabe der Datei vom Server in der Reihenfolge zusammengefügt werden, in der sie enthalten sind, und dann als einzelne Datei interpretiert werden.
Zunächst werden die Möglichkeiten zum Einbinden von Dateien in PHP und deren Auswirkungen untersucht. Am Ende des Artikels werden wir überprüfen, wann wir dies tun sollten.
umfassen()
Laut dem PHP-Handbuch:
include () wird die angegebene Datei einschließen und auswerten. Wenn die Datei nicht gefunden wird, wird eine PHP-Warnung ausgegeben.
Einfach ausgedrückt bedeutet dies, dass PHP auf die Datei schaut, die Sie einbinden möchten. Wenn es gefunden wird, wird es an der Stelle, an der Sie es deklariert haben, zu Ihrem Skript hinzugefügt.
Dies ist wichtig zu verstehen. Angenommen, Sie schreiben eine Reihe von Funktionen, die von einer vorherigen Reihe von Funktionen abhängen. In diesem Fall müssen Sie sicherstellen, dass die andere Datei zuerst enthalten ist.
Wenn Sie dagegen eine Reihe von Funktionen oder eine externe Datei mitten in eine vorhandene Funktion einfügen möchten, können Sie sie genau an der Stelle einfügen, an der Sie sie benötigen.
Beachten Sie zweitens, dass PHP eine Warnung auslöst, wenn die Datei fehlt. Abhängig von der Serverkonfiguration wird dies möglicherweise für den Browser gerendert oder in eine Protokolldatei (oder in beide) geschrieben..
Trotzdem sind Warnungen genau das - sie gelten nicht als verhängnisvoll und beenden normalerweise nicht die Ausführung, sind jedoch zu beachten, da dies im Allgemeinen impliziert, dass ein Teil Ihrer Arbeit nicht ordnungsgemäß geladen und / oder interpretiert wird.
Beachten Sie schließlich, dass beim Laden einer Datei mit umfassen()
dass es Zugriff auf alle Variablen hat, die zuvor in Ihrem vorhandenen Skript definiert wurden.
Angenommen, Sie arbeiten an einer Funktion, und zur Hälfte der Funktion fügen Sie eine separate Datei hinzu. Diese separate Datei hat Zugriff auf die Variablen, die zuvor in der Funktion definiert wurden, in der sie enthalten ist.
Obwohl Sie dies als bequem ansehen, wird das externe Skript etwas unklar, da es nicht unbedingt zeigt, dass es von extern definierten Variablen abhängt. Dies kann insbesondere bei der Arbeit mit einem Team verwirrend sein.
include_once ()
Direkt aus dem PHP-Handbuch entnommen:
include_once () führt dasselbe Verhalten wie include () aus, schließt jedoch die Datei nicht erneut ein, wenn sie bereits enthalten ist.
Es ist offensichtlich nicht nötig, so viel Zeit mit den allgemeinen Punkten von zu verbringen include_once ()
, Es gibt jedoch einige wichtige Unterscheidungsmerkmale include_once ()
funktioniert und wie umfassen()
funktioniert.
Erstens, während include_once ()
verhält sich weitgehend gleich wie umfassen()
, es wird nicht Erlauben Sie Ihnen, das Skript erneut einzuschließen. Das heißt, wenn an einer anderen Stelle in Ihrem Projekt eine externe Datei enthalten ist, ist dies der Fall der endgültige Ort in die diese Datei aufgenommen wurde.
Was ist der Vorteil davon? Abgesehen davon, dass nur ein einziger Platz für ein Skript vorhanden ist, wird sichergestellt, dass Variablen und Funktionen nicht unbedingt neu definiert werden. Erinnern Sie sich daran, wenn Sie verwenden umfassen()
, Skripts haben Zugriff auf Funktionen und Variablen, die über ihnen definiert sind.
Wenn Sie sich dafür entscheiden, einen neuen Satz von Variablen oder Funktionen in einer Datei zu definieren, fügen Sie ihn in ein anderes Skript ein und nicht benutzen include_once ()
, Dann besteht die Gefahr, dass Funktionen und Variablen neu definiert werden, was zu erheblichen Problemen bei der Ausführung Ihres Codes führen kann.
Das Anfordern von Dateien ähnelt dem Einschließen von Dateien. Dies ist eine andere Möglichkeit, mit der Sie ein Skript in das Skript einfügen können, das Sie gerade schreiben. Es hat jedoch eine Reihe von Auswirkungen auf Fehler und Sicherheit.
Obwohl Sie das Anfordern einer Datei auf die gleiche Art und Weise betrachten können, wie Sie eine Datei einschließen können, hat dies die Implikation, dass sie stärker ist - das heißt, die externe Datei ist erforderlich zur Ausführung.
Wie wir sehen werden, ist dies genau der Fall.
benötigen()
Nochmals direkt aus dem PHP-Handbuch:
requir () funktioniert genauso wie include (), gibt jedoch einen schwerwiegenden PHP-Fehler aus, wenn die Datei nicht gefunden wird.
Also hier ist die Sache mit benötigen()
: führt dieselbe Aktion aus wie umfassen()
Wenn Sie das externe Skript in den Kontext des Skripts importieren, an dem Sie arbeiten, die Datei jedoch nicht gefunden wird, wird ein Fehler ausgegeben und die Ausführung wird vollständig angehalten.
Dies bedeutet, dass Ihre Anwendung angehalten wird. Mit umfassen()
, Sie erhalten eine Warnung und es wird versucht, weiterzumachen.
In mancher Hinsicht scheint es, als ob Dateien benötigt werden das richtiger weg zu gehen. Warum sollten Sie etwas riskieren, nur um eine Warnung mit einem möglichen Fehler in der Anwendung zu erhalten.
Aber es kommt alles darauf an, woran Sie gerade arbeiten. Manchmal sind einfache PHP-Warnungen in Ordnung - zum Beispiel, wenn Sie vergessen, den Index eines Arrays zu initialisieren -, andere Male benötigen Sie einen Fehler.
Es gibt keine harten und schnellen Regeln für die Verwendung dieser Option im Vergleich zu den Inhalten. Denken Sie jedoch kritisch darüber nach, was Sie tun und welche Auswirkungen es hat, wenn es versagt.
Zum Schluss noch aus dem PHP-Handbuch:
Requires_once () führt das gleiche wie Required () aus, schließt die Datei jedoch nicht ein zweites Mal ein, wenn sie bereits enthalten ist.
Dies ist möglicherweise am einfachsten zu verstehen, da wir die letzten drei Funktionen relativ detailliert behandelt haben. Einfach gesagt, einmalig benötigt()
führt genau die gleichen Funktionen wie benötigt aus, obwohl es nicht versucht, eine Datei erneut einzuschließen, wenn sie bereits in Ihr Skript geladen ist.
Neben dem kritischen Nachdenken darüber, welche Funktion für die Art Ihres Projekts am besten ist, gibt es zwei zusätzliche Faustregeln, die Sie beim Arbeiten beachten sollten umfassen()
und benötigen()
:
einmalig benötigt()
Für größere Standorte ist es besser, da auf der unteren Ebene einige zusätzliche Arbeiten ausgeführt werden, die sich auf Sicherheit und Leistung auswirkeninclude_once ()
ist schneller und gilt im Allgemeinen für kleinere Standorte als akzeptabelEinfach genug, aber was ist mit den WordPress-Hilfsfunktionen?
Mit all dem gesagt, dort sind bessere Möglichkeiten als zu verwenden umfassen()
und benötigen()
um Vorlagen in Ihre WordPress-Projekte aufzunehmen.
Angenommen, Sie haben mehrere Schleifendateien - eine für ein Postformat:
Und Sie müssen sie einschließen single.php wann immer Sie an einer einzelnen Beitragsseite eines Themes arbeiten.
Zu einem bestimmten Zeitpunkt war es akzeptabel, so etwas zu tun:
include_once ('loop-standard.php');
Aber das ist nicht mehr die beste Praxis.
get_template_part ()
WordPress bietet jetzt eine Funktion, get_template_part ()
, Dies ist Teil der nativen API und wird speziell für die Wiederverwendung von Abschnitten (oder Vorlagen) von Code (außer Kopf- und Fußzeile sowie Seitenleiste) in Ihrem Design verwendet.
Die Funktion akzeptiert zwei Argumente:
Schleife
'.Standard
','Zitat
', oder 'Bild
'.Nehmen wir im Beispiel weiter oben an, dass wir uns in The Loop befinden und die Zitat-Post-Formatvorlage einschließen möchten. In diesem Fall würden wir Folgendes tun:
if ('quote' == get_post_format ()) get_template_part ('loop', 'quote');
Vorausgesetzt, Sie haben Ihre Vorlagen entsprechend den Postformattypen benannt, können Sie noch etwas sauberer machen:
get_template_part ('loop', get_post_format ());
Sauber, richtig?
Sie können dies tatsächlich einen Schritt weiter gehen. Angenommen, Sie haben Ihren Paginierungscode in eine eigene Vorlagendatei namens abstrahiert pagination.php. Verwenden get_template_part ()
, Sie können dies auf Ihrer gesamten Website einfügen, sagen wir, footer.php oder in index.php, single.php, archives.php, usw. einfach durch Hinzufügen:
get_template_part ('pagination');
Viel einfacher, nicht wahr??
Nach all dem müssen wir uns noch über die Richtlinien darüber unterhalten, wann sie was verwenden sollen. Ich bin auf keinen Fall eine Autorität, aber hier sind die Daumenregeln, die ich befolge:
get_template_part ()
.include_once ()
und ich benutze es in der Regel einmal in einer Funktion. Sie können dies in meinen Heizplatten sehen.einmalig benötigt()
.Das ist alles!
Für detailliertere Erklärungen zu den in diesem Artikel behandelten Themen lesen Sie die Handbuchseiten für jede der Funktionen:
umfassen()
include_once ()
benötigen()
einmalig benötigt()
get_template_part ()