Globale Objekte in PHP

globale Sterne

Die Botschaft wird von grundlegender Bedeutung für die Programmierung sein - globale Objekte. Ich würde sagen, dass dies ein wissenschaftliches Thema ist, das ich diskutieren möchte. Um also nicht „ihre eigenen Beine zu schießen“, programmieren Programmierer nicht im globalen Bereich. Ok, alles ist klar und extrem einfach, darüber nachdenken? Nicht in diesem Zeug. Wie Sie wissen, verursacht jede Aktion eine Kette von Ereignissen und logischen Konsequenzen.

Warum sollten Sie zunächst ein Dogma erstellen, das Sie nicht erstellen können? Erstellen wir stattdessen eine stop_globals () -Funktion, beispielsweise für die PHP-Sprache. Das Framework kann es zu Beginn der Ausführung seines Codes ausführen, und weitere Versuche, mit dem globalen Bereich zu arbeiten, führen zu PHP-Fehlern. Ist diese Lösung gut?

Das ist alles andere als alles, was diskutiert werden könnte.

Der Hauptgrund für das Vorhandensein des obigen Dogmas besteht darin, dass die Möglichkeit besteht, die Werte globaler Variablen versehentlich zu überschreiben, was wiederum zu schwierigen Lokalisierungsfehlern im Programm führen kann. Und wenn Sie globale Variablen zum Lesen verwenden können, aber nicht zum Schreiben?

Achten wir auf das uns umgebende Universum. Darin befinden sich globale Objekte: Raum, Zeit, Materie, Energie, möglicherweise dunkle Materie und Energie. In ähnlicher Weise gibt es aufgrund meiner Erfahrung in der Webprogrammierung eine Reihe von Objekten, für die die Verwendung von Dependency Injection unpraktisch ist, und solche Objekte sind im Wesentlichen global. Dies ist ein Datenbankkommunikationsobjekt, das USER-Objekt und andere. Um mit solchen Objekten zu arbeiten, könnte man in PHP die Funktion super ('sky', 'user') einführen, die die Variablen $ sky und $ user superglobal macht, wie $ _GET oder $ _POST.

Eine solche Lösung ist nicht schlechter als das traditionelle Dogma „Es ist unmöglich, im globalen Bereich zu programmieren“, da das Schreiben von Daten in solche Variablen sofort erkannt wird und PHP einen Fehler ausgibt. Der Vorteil ist folgender:

  1. Konzeptionell bleiben globale Objekte global, das Programm sieht einfacher aus
  2. Dieser Ansatz ist produktiver. Es ist viel schneller, direkt auf eine Variable zuzugreifen, als ihren Wert vorher durch den Stapel zu leiten. Dies bedeutet den Prozessorstapel, mit dem Compiler Funktionsparameter übergeben. Auf die eine oder andere Weise hat die Implementierung des DI-Musters einen Overhead für die verwendeten Ressourcen.

Wie Sie wissen, positioniert sich das PHP-Projekt als Elefant, da es viele Programmieransätze, eine große Anzahl von Funktionen und Klassen sowie eine Fülle von experimentellem Code bietet, der im Laufe der Zeit ausgewertet wird und in Zukunft entwickelt oder gelöscht werden kann. In diesem Zusammenhang bitte ich freidenkende Menschen, ihre begründete Meinung zu den Fragen zu äußern:

  1. Unterstützen Sie die Einführung der experimentellen Funktionen super () und stop_globals ()?
  2. Was halten Sie von der obigen Idee als Ganzes?

Kein heiliger Krieg, danke.

Abschließend möchte ich meine Beobachtung zu Laravel und den Gefahren von Programmiermustern festhalten. Wie Sie wissen, wird Laravel das "Lagerhaus der Antimuster" genannt. Ich glaube, dass diese Tatsache sowie das freie Denken des Autors dazu geführt haben, dass dieses Projekt so populär wurde, wie es ist. Muster sind gut für Programmierer, um zu kommunizieren und auf eine Programmiereinheit zu verweisen. Aber sie schaden, verwirren Programmierer und lassen nicht zu, dass Programme effektiv sind. Machen wir die Programmierung einfacher.

Source: https://habr.com/ru/post/de423151/


All Articles