


Von Funktionen über Schließungen bis hin zu Methoden: Eine ganzheitliche Sicht des PHP -Bereichs
Funktionen haben einen isolierten Umfang und erfordern globale oder $ globale, um globale Variablen zuzugreifen. 2. Verschluss erfassen äußere Variablen explizit durch Verwendung, durch Wert oder durch Referenz mit &;; 3. Methoden verwenden $ dies, um auf Objekteigenschaften zuzugreifen, und Verschlüsse innerhalb von Methoden können $ dies in PHP 5.4 erben. Verwenden Sie jedoch die Klarheit und Sicherheit bei der Übergabe von Schließungen. Das Verständnis dieser Umfangsregeln ermöglicht vorhersehbare und wartbare PHP -Code.
Beim Lernen von PHP ist eines der schwierigsten Konzepte, die es zu erfassen ist, nicht die Syntax - es ist Umfang : Verstehen Sie, wo Variablen und Funktionen leben, wie sie zugegriffen werden und wie der Kontext alles verändert. Unabhängig davon, ob Sie eine einfache Funktion aufrufen, eine Schließung verwenden oder eine Methode auf ein Objekt aufrufen, verschieben die Regeln des Umfangs subtil, aber erheblich. Gehen wir durch diese drei Konstrukte - Funktionen, Verschlüsse und Methoden - und sehen, wie PHP in jedem Umfang umgeht und ein zusammenhängendes mentales Modell aufbaut.

Funktionsumfang: Die Grundlagen
In einer regelmäßigen PHP -Funktion sind standardmäßig die innen deklarierte Variablen lokal . Sie erben keine Variablen aus dem äußeren (globalen) Bereich, es sei denn, es wird ausdrücklich gesagt.
$ color = 'blau'; Funktion paint () { echo $ color; // Hinweis: undefinierte Variable } malen();
Um auf globale Variablen zuzugreifen, benötigen Sie das global
Keyword:

Funktion paint () { global $ color; echo $ color; // 'Blau' }
Alternativ können Sie $GLOBALS
Superglobal verwenden:
Funktion paint () { echo $ global ['color']; // 'Blau' }
Schlüsselpunkt : Funktionen haben ihren eigenen isolierten Bereich. Kein automatischer Zugriff auf äußere Variablen.

Schließungen und use
: Erfassen des Umfangs
Schließungen (anonyme Funktionen) sind flexibler. Sie können Variablen aus dem übergeordneten Bereich mithilfe des use
verwenden .
$ color = 'rot'; $ painter = function () verwenden ($ color) { echo $ color; // 'Rot' }; $ painter ();
Hier wird $color
durch Wert in den Verschluss kopiert . Auch wenn Sie später $color
ändern, hält der Schließ den ursprünglichen Wert:
$ color = 'grün'; $ painter = function () verwenden ($ color) { echo $ color; }; $ color = 'gelb'; // Änderung nach der Definition der Schließung $ painter (); // druckt immer noch 'grün'
Möchten Sie stattdessen auf die Variable verweisen ? Verwenden &
:
$ color = 'grün'; $ painter = function () verwenden (& $ color) { echo $ color; }; $ color = 'lila'; $ painter (); // 'lila'
Jetzt sieht der Schließ den aktuellen Wert, da er eine Referenz enthält.
Key Insight : Mit Abschlüssen können Sie äußere Variablen explizit importieren, entweder nach Wert oder nach Bezugnahme - keine Erraten, keine Globalen.
Methoden und $this
: Objektumfang
Wenn Sie sich in den Unterricht bewegen, erhält der Umfang eine andere Ebene: die Objektinstanz. In einer Methode befinden sich im Rahmen des Objekts und $this
haben Sie Zugriff auf seine Eigenschaften und Methoden.
Klassenauto { private $ color = 'Silber'; public function drive () { echo "Fahren {$ this-> color} Auto."; } }
Im Gegensatz zu Funktionen oder Schließungen müssen Methoden nicht use
oder global
um Instanzdaten zuzugreifen - sie sind auf natürliche Weise an $this
gebunden.
Aber was ist, wenn Sie einen Verschluss innerhalb einer Methode verwenden? Kennt es $this
automatisch?
Klassenauto { private $ color = 'blau'; Öffentliche Funktion getColorfetcher () { return function () { $ this-> Farbe zurückgeben; // Fataler Fehler: Verwenden Sie $ diesen externen Objektkontext }; } }
Hoppla! Obwohl der Verschluss in einer Methode definiert ist, erbt er nicht automatisch $this
. Ab PHP 5.4 erfassen anonyme Funktionen, die in einem Objektkontext erstellt wurden, jedoch $this
, wenn es verwendet wird.
Das funktioniert also tatsächlich:
$ fetcher = (New Car ())-> getColorfetcher (); echo $ fetcher (); // 'blau' - funktioniert in PHP 5.4
Wenn Sie jedoch den Verschluss an ein anderes Objekt (oder keine) binden, kann sich $this
ändern oder verschwinden.
Um sicher oder explizit zu sein, können Sie use
verwenden:
Öffentliche Funktion getColorfetcher () { $ self = $ this; return function () verwenden ($ self) { $ self> color zurückgeben; }; }
Dieses Muster ist nützlich, wenn Abschluss an Funktionen übergeht, die den Kontext ändern könnten.
Umfangszusammenfassung: Das Gesamtbild
Konstrukt | Bereichszugang | Schlüsselmechanismus |
---|---|---|
Funktion | Isoliert | global , $GLOBALS
|
Schließung | Gefangen genommen | use ($var) oder use (&$var)
|
Verfahren | Objekt | $this zum Beispieldaten |
Verschluss in der Methode | Kommt darauf an | Erbt $this , wenn er unterstützt wird, kann aber für Sicherheit use werden |
Ein paar praktische Imbissbuden:
- Vermeiden Sie
global
, wenn möglich - es erschwert den Code schwieriger zu testen und zu begründen. - Verwenden Sie in Schließungen nachdenklich
use
, ob Sie eine Kopie oder eine Referenz benötigen. - Seien Sie vorsichtig mit
$this
in Schließungen - insbesondere wenn der Verschluss weitergegeben oder außerhalb des ursprünglichen Objektkontexts aufgerufen werden kann. - Im modernen PHP funktionieren Schließungen in Methoden in der Regel gut mit
$this
, aber expliziteuse ($this)
können die Absicht klarer machen.
Abschließender Gedanke
Die Umfangsregeln von PHP scheinen zunächst fragmentiert zu sein - isolierte Funktionen, schließt selektiv, Methoden, die mit Objekten gebunden sind -, aber sie sind sinnvoll, wenn Sie sie als Werkzeuge zur Kontrolle des Zugriffs ansehen. Jedes Konstrukt gibt Ihnen gerade genug Strom, um bei Bedarf Bereiche zu verbinden, ohne sie standardmäßig zu veröffentlichen.
Zu verstehen, wie und warum Umfang wechselt zwischen Funktionen, Schließungen und Methoden, ist nicht nur akademisch - es ist der Schlüssel zum Schreiben vorhersehbarer, wartbarer PHP.
Grundsätzlich ist es keine Magie. Es ist Design.
Das obige ist der detaillierte Inhalt vonVon Funktionen über Schließungen bis hin zu Methoden: Eine ganzheitliche Sicht des PHP -Bereichs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Hyperglobal-Variablen von PHP sind immer integriert, um Anforderungsdaten zu verarbeiten, Status zu verwalten und Serverinformationen zu erhalten. 1. Bei Verwendung von $ _get müssen URL-Parameter vom Typ Typ konvertiert und verifiziert werden. 2. Beim Empfangen von Formulardaten über $ _post sollte die Filterung mit filter_input () durchgeführt werden. 3. Vermeiden Sie die Verwendung von $ _Request, um Sicherheitslücken zu verhindern. 4.. 5. Beim Einstellen von $ _cookie können Sie sichere, httponly- und samesit -Attribute aktivieren; 6. Die Informationen in $ _Server können nicht vollständig vertrauenswürdig sein und können nicht für die Sicherheitsüberprüfung verwendet werden. 7. $ _ env kann sein

ThedifferencebetweenLocalandglobalscopeliesinwherevariablesaredeclared und Accessible: GlobalVariableSotedefinedoutsideFunctions und Accesssibleverywhere, whilelocalvariablesareDeclaredInsideFunctionSandable -Accessiblewithinthem.1.GlobalsCopeClordinScroadaccacecescinsible

PHPRESOLVEVARIABLEISPECIFORDER: 1.LOCALSCOPHWITHINTHECURENTFUNCTION, 2. FUNKTIONPARAMETERS, 3. VariablesimportedViauSinClosures, 4.GlobalsCopeonlyifexpliticlictelyDeclared withglobealAnt Through $ global, 5.superglobals

TheGlobalkeywordinphpallowsFunctionStoaccessvariables von derTheGlobalscope, butitshouldepesedSesparyduetoSignificantDrawbacks.1) iTenableSquickAccessToconfigurationValuesinsMallorlegacyscripts

Funktionen mit Ertrag werden zu Generatoren, und wenn sie aufgerufen werden, geben sie das Generatorobjekt zurück, anstatt sofort ausgeführt zu werden. 2. Die lokalen Variablen des Generators werden während der Ertragspause nicht zerstört, sondern auch mit dem Generatorrahmen existieren, bis der Generator erschöpft oder geschlossen ist. 3. Eine erweiterte Lebenszyklus variabler Lebenszyklus kann zu einer Erhöhung der Speicherverwendung führen, insbesondere wenn sie sich auf große Objekte beziehen. 4. In Kombination mit Schließungen werden LEGB -Regeln immer noch befolgt, aber das spätbindende Problem der Schleifenvariablen muss durch sofort Bindung gelöst werden (z. B. den Standardparameterwert). 5. .CLOSE () sollte explizit aufgerufen werden, um sicherzustellen, dass schließlich die Blockdauer durchgeführt wird, um Verzögerungen bei der Ressourcenreinigung zu vermeiden. Der Generator beeinflusst das Gedächtnis und das Verhalten, indem er die Überlebenszeit von Variablen erweitert, ändert jedoch nicht die lexikalischen Umfangsregeln.

ThetwomaintoolsforaccessingglobalvariablesinPHParetheglobalkeywordandthe$GLOBALSsuperglobalarray;1)Theglobalkeywordcreatesareferencetoaglobalvariableinsideafunction,allowingdirectaccessandmodification,andifthevariableisundefined,itinitializesitasnull

Wenn Sie in PHP externe Variablen in anonymen Funktionen verwenden möchten, müssen Sie sie explizit über das Schlüsselwort verwenden. 1. Die Verwendung wird verwendet, um externe Variablen in den lexikalischen Bereich des Verschlusses einzuführen. 2. standardmäßig variablen bestehen und durch Referenz mit & $ var syntax übergeben; 3.. Mehrere Variablen können importiert werden, durch Kommas getrennt; 4. Der Wert der Variablen wird erfasst, wenn der Verschluss definiert ist, nicht, wenn sie ausgeführt wird. 5. Jede Iteration in der Schleife erstellt eine unabhängige Verschlusskopie, um sicherzustellen, dass der variable Wert korrekt erfasst wird. Die Verwendung ist daher ein Schlüsselmechanismus, um die Wechselwirkung zwischen dem Verschluss und der externen Umgebung zu erreichen, wodurch der Code flexibler und kontrollierbarer wird.

Variablesdisappearduetoscoperules—wherethey’redeclareddetermineswheretheycanbeaccessed;2.Accidentalglobalcreationoccurswhenomittingvar/let/const,whilestrictmodepreventsthisbythrowingerrors;3.Blockscopeconfusionarisesbecausevarisfunction-scoped,unlike
