Warum sich mit dem automatischen Laden in WordPress herumschlagen, Teil 2
Im vorherigen Beitrag habe ich einige Punkte behandelt, warum ich denke, dass include_once, require_once und andere ähnliche Aussagen zu schlechten Entwicklungspraktiken führen (zumindest wenn es um die Arbeit geht, die wir mit unseren WordPress-Projekten machen ).
Wenn Sie es nicht gelesen haben, keine große Sache. Der Kern des Beitrags ist, dass diese Aussagen Folgendes machen:
- debuggen schwieriger,
- Ablaufverfolgungscode schwieriger zu tun.
Letztendlich sind sie Dinge, die wir vermeiden können. Ich habe den Beitrag wie folgt beendet:
Damit bleibt immer noch die Frage, warum das automatische Laden (oder das Einbinden von Dateien von Drittanbietern) überhaupt benötigt wird.
Und obwohl ich gerne alle Details in diesem Beitrag behandeln würde, ist es wichtig, dass dieser und ein weiterer Beitrag einige grundlegende Themen zu Sprachen, Interpretern und Compilern verstehen, bevor Sie zu weit vorankommen.
Automatisches Laden in WordPress: Arten von Sprachen
Wenn es um Programmiersprachen geht, können sie in zwei verschiedene Arten von Sprachen unterteilt werden:
- statisch typisiert
- dynamisch typisiert
Sie sind auch leicht zu erkennen.
Statisch typisierte Sprachen
Eine statisch typisierte Sprache bedeutet, dass beim Deklarieren einer Variablen wie einer Zeichenfolge, einer Ganzzahl oder einer Gleitkommazahl dieser Typ während seiner gesamten Lebensdauer beibehalten wird.
Das bedeutet nicht, dass es nicht geändert oder in einen anderen Typ geparst werden kann, aber die Idee ist, dass Sie seinen Typ deklarieren und so wird es betrieben.
Es wird im Allgemeinen als ein bestimmter Typ angegeben, wenn es deklariert wird, wie string oder int, und wird am häufigsten in kompilierten Sprachen verwendet.
Dynamisch typisierte Sprachen
Andererseits haben dynamisch typisierte Sprachen Variablen, die in Ermangelung eines besseren Begriffs in der Natur fließender sind.
Das heißt, Sie können es zunächst als Zeichenfolge deklarieren, dann mit einer Ganzzahl vergleichen und später wieder als Zeichenfolge verwenden .
Der Interpreter oder Compiler (je nachdem, welche Sprache Sie verwenden) wird sein Bestes tun, um abzuleiten, was Sie versuchen, basierend auf dem Kontext dessen, was Sie in Ihrem Code tun, aber es ist nicht immer richtig.
Das kann zu seltsamen Nebenwirkungen und Fehlern führen.
JavaScript ist so. Um ein Beispiel zu sehen, öffnen Sie die Konsole Ihres Browsers und geben Sie so etwas ein, wie Sie es im folgenden Screenshot sehen (und achten Sie auf das Ergebnis):
Beachten Sie, dass der Interpreter bei Verwendung eines standardmäßigen doppelten Gleichheitszeichens die Zeichenfolge in den booleschen Typ umwandelt, obwohl die wahre Zeichenfolge nicht wahr ist.
Der zweite Fall ist korrekt (und deshalb sollten fast immer Triple-Equals verwendet werden).
Außerdem ist es nicht so, wie etwas in einer Sprache funktioniert, wie es in einer anderen Sprache funktioniert.
Das Fazit ist, dass Sie nicht erwarten, dass Ihre Sprachen dasselbe tun, nur weil sie möglicherweise dynamisches Schreiben unterstützen.
Was hat das mit dem automatischen Laden zu tun?
Okay, wir haben ein bisschen über Primitive gesprochen und das ist alles in Ordnung, aber es bringt nicht viel, wenn es um Klassen, Objekte, Instanziierung, automatisches Laden usw. geht, oder?
Der Zweck der Erwähnung der oben genannten Themen besteht darin, die Rolle aufzuzeigen, die Interpreter und Compiler spielen, wenn sie mit Code in dynamischen Sprachen arbeiten.
Und das ist wichtig, weil PHP eine dynamische Sprache ist.
An diesem Punkt wollte ich ursprünglich mit Beispiel-PHP-Code, Namespaces, Autoloading, Include -Anweisungen und all dem anfangen, aber ich versuche, meine Artikel auf einer bestimmten Länge zu halten, und das fing an, sich etwas weiter zu erstrecken, als ich wollte .
Die ultimative Erkenntnis aus diesem Beitrag, wenn ich es zusammenfassen müsste, ist also:
Dynamisch typisierte Sprachen wie PHP haben nicht den Luxus kompilierter Sprachen, bei denen alles in eine einzige Binärdatei kompiliert wird. Wir müssen dem Programm auf irgendeine Weise mitteilen, wo die Abhängigkeiten im Kontext des größeren Programms bestehen.
Und darauf werde ich im nächsten Beitrag eingehen.