Referenz: Was ist der Geltungsbereich der Variablen, die Variablen sind zugänglich, von wo aus und was sind "undefined variable" - Fehler?
Hinweis: Dies ist ein Verweis Frage für den Umgang mit dem Geltungsbereich von Variablen in PHP. Bitte schließen Sie alle der vielen Fragen, die mit der Montage dieses Muster wie doppelte von dieser.
Was ist "Geltungsbereich von Variablen" in PHP? Sind Variablen aus .php-Datei zugänglich, in einem anderen? Warum bekomme ich manchmal "undefined variable" Fehler?
Wenn Sie betitelten diese als "Undefined variable" erhalten Sie noch viel mehr trifft 🙂 good job, obwohl
Guter Punkt. 🙂
Eigentlich keine. 2k views in 2 Jahren ist....
über die richtige Zeit, um aus einem random Kommentar?
Ich bin wirklich nicht sicher, was Sie versuchen zu sagen, dass Kommentar wenn. "...." ...was?! 😛
Guter Punkt. 🙂
Eigentlich keine. 2k views in 2 Jahren ist....
über die richtige Zeit, um aus einem random Kommentar?
Ich bin wirklich nicht sicher, was Sie versuchen zu sagen, dass Kommentar wenn. "...." ...was?! 😛
InformationsquelleAutor deceze | 2013-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist die "variable scope"?
Variablen haben eine begrenzte "Reichweite", oder "Orte, von denen Sie zugänglich sind". Nur weil Sie schrieb
$foo = 'bar';
einmal irgendwo in Ihrer Anwendung bedeutet nicht, dass Sie können beziehen sich auf$foo
aus überall anderes in der Anwendung. Die variable$foo
hat einen bestimmten Spielraum, innerhalb dessen Sie gültig ist, und nur code, der in dem gleichen Umfang hat Zugriff auf die variable.Wie wird ein Bereich definiert, in PHP?
Sehr einfach: PHP hat Funktionsumfang. Das ist die einzige Art von Rahmen separator, existiert in PHP. Variablen innerhalb einer Funktion sind nur innerhalb der Funktion. Variablen außerhalb von Funktionen sind überall verfügbar außerhalb von Funktionen, aber nicht in jeder Funktion. Dies bedeutet, dass es einen speziellen Bereich in PHP: die globalen Umfang. Jede deklarierte variable außerhalb einer Funktion ist innerhalb dieses globalen Rahmen.
Beispiel:
$foo
ist in der globalen Umfang$baz
ist in einem lokalen Anwendungsbereich innenmyFunc
. Nur code innerhalbmyFunc
hat Zugang zu$baz
. Nur code außerhalbmyFunc
hat Zugang zu$foo
. Weder hat Zugang zu den anderen:Umfang und die enthaltenen Dateien
Datei Grenzen nicht getrennt Umfang:
a.php
b.php
Gelten die gleichen Regeln, um
include
d code gilt für alle anderen-code: nurfunction
s separaten Bereich. Für den Zweck, der Umfang, die Sie sich vorstellen können, einschließlich Dateien, wie kopieren und einfügen code:c.php
Im obigen Beispiel
a.php
enthalten war innenmyFunc
, alle Variablen innerhalba.php
nur lokalen Gültigkeitsbereich von Funktionen. Nur weil Sie erscheinen werden in den globalen Bereich ina.php
bedeutet nicht unbedingt, Sie sind, es hängt tatsächlich davon ab, in welchem Kontext dieser code wird aufgenommen/ausgeführt wird.Was über Funktionen innerhalb von Funktionen und Klassen?
Jede neue
function
Deklaration führt einen neuen Bereich, so einfach ist das.(anonyme) Funktionen innerhalb von Funktionen
Klassen
Was ist der Umfang gut?
Umgang mit scoping Probleme können scheinen ärgerlich, aber begrenzte Geltungsbereich von Variablen ist wichtig, um das schreiben komplexer Anwendungen! Wenn jede variable, die Sie deklarieren, wäre verfügbar, von überall in Ihrer Anwendung, Sie würde verstärkt werden, alle über Ihre Variablen mit keinen wirklichen Weg, um zu verfolgen, welche änderungen was. Es gibt nur so viele sinnvolle Namen, die Sie geben können, um Ihre Variablen, werden Sie wahrscheinlich wollen, verwenden Sie die variable "
$name
" in mehr als einem Ort. Wenn Sie nur dieses einzigartige variable name einmal in Ihre app, Sie würden zurückgreifen müssen, um wirklich komplizierte Benennung von Regelungen, um sicherzustellen, dass Ihre Variablen sind einzigartig und Sie sind sich nicht ändern, die falsche variable aus dem falschen code.Beobachten:
Wenn es keinen Spielraum, was würden die oben genannten Funktion zu tun? Wo kommt
$bar
kommen? Welchen Zustand hat es? Ist es überhaupt initialisiert? Sie haben, um zu überprüfen, jedes mal? Das ist nicht wartbar. Das bringt uns zu...Kreuzung Geltungsbereich Grenzen
Der richtige Weg: die übergabe von Variablen in-und out -
Die variable
$bar
ist ausdrücklich kommen in diesem Bereich als Funktion argument. Just Blick auf diese Funktion, es ist klar, wo die Werte klappt es mit der stammen aus. Es dann explizit gibt einen Wert. Der Anrufer hat das Vertrauen zu wissen, was Variablen der Funktion wird die Arbeit mit und in denen die Rückgabe Werte stammen von:Ausweitung des Geltungsbereichs von Variablen anonyme Funktionen
Der anonymen Funktion ausdrücklich mit einschließt
$foo
von der es umgebenden Rahmen. Beachten Sie, dass dies nicht das gleiche wie globalen Umfang.Der falsche Weg:
global
Wie gesagt, ist die Globale Reichweite ist etwas besonderes, und können Funktionen explizit importieren, Variablen aus:
Diese Funktion verwendet und ändert die Globale variable
$foo
. Dies nicht tun! (es sei denn, Sie wirklich wirklich wirklich wirklich weißt, was du tust, und selbst dann: nicht!)Alle Aufrufer dieser Funktion sieht, ist dies:
Es gibt keine Anzeichen dafür, dass diese Funktion hat Nebenwirkungen, doch es tut. Dieses sehr leicht zu einem Wirren Durcheinander, da einige Funktionen ändern halten und erfordern einige Globale Staat. Sie wollen Funktionen stateless, handeln nur auf Ihre Eingaben und Rückgabe definiert die Ausgabe, wie viele Male Sie anzurufen.
Sollten Sie vermeiden, mit den globalen Bereich in keiner Weise so viel wie möglich; die meisten sicherlich sollten Sie nicht "ziehen" auf Variablen aus dem globalen Gültigkeitsbereich in einem lokalen Bereich.
global
, so bitte sagen Sie uns, Wann sollen wir verwendenglobal
? Und bitte, erklären (ein bit) was iststatic
..?Es gibt keinen "richtigen" Weg für
global
. Es ist immer falsch. Übergabe Parameter der Funktion richtig ist.static
wird gut erklärt in der Anleitung und hat nicht viel zu tun mit Umfang. Kurz gesagt es kann gedacht werden als "Gültigkeitsbereich von globalen Variablen". Ich bin expanding ein bisschen auf seine Verwendung hier kunststube.net/static.Mein Gedanke ist, wenn eine php-variable ist wichtig, genug zu verdienen einen globalen status, der es verdient, eine Spalte in einer Datenbank. Vielleicht ist es übertrieben, aber es ist ein fool-proof-Ansatz, der passt zu meinem mittelmäßigen Programmierung Witz
Es gibt so viel zu packen gibt... ಠ_ಠ Das ist sicherlich nicht der Ansatz, den ich befürworten würde.
klein wenig ein argument, was hier passiert heute stackoverflow.com/q/51409392, - wo die OP erwähnt, dass die doppelten (hier) nicht erwähnt, über
include_once
und möglicherweiserequire_once
sollte auch Hinzugefügt werden, irgendwo, nur sagen. OP stimmten zu, öffnen Ihre Frage auch. Würde die post einen speziellen Fall und was sollte dagegen getan werden?InformationsquelleAutor deceze
Obwohl definierten Variablen innerhalb einer Funktion Gültigkeitsbereich nicht zugegriffen werden kann von außen, dass bedeutet nicht, dass Sie nicht verwenden können, Ihre Werte nach, dass die Funktion abgeschlossen ist. PHP hat eine bekannte
static
Stichwort, die ist weit verbreitet in der objektorientierten PHP für die Definition von statischen Methoden und properties, aber sollte man im Hinterkopf behalten, dassstatic
kann auch verwendet werden, innerhalb von Funktionen zu definieren statische Variablen.Was ist das 'statische variable'?
Statische variable unterscheidet sich von der gewöhnlichen definierten Variablen in der Funktion Umfang im Falle, dass es nicht lose Wert beim verlassen dieses Bereichs. Wir betrachten das folgende Beispiel der Verwendung von statischen Variablen:
Ergebnis:
Hätten wir definiert
$counter
ohnestatic
dann jedes mal hallte Wert wäre der gleiche wie$num
parameter an die Funktion übergeben. Mitstatic
erlaubt zu bauen, diese einfache Zähler ohne zusätzliche Abhilfe.Statische Variablen verwenden-Fällen
Zweck) zu übergeben Sie als Parameter.
Beispiel Ergebnis des Lesens, unveränderliche Datei auf dem server.
Tricks
Statische variable existiert nur in einem lokalen Gültigkeitsbereich von Funktionen. Es kann nicht sein,
zugreifen die außerhalb der Funktion definiert wurde. So können Sie
werden Sie sicher, dass Sie halten Ihren Wert unverändert bis zum nächsten Aufruf
auf die Funktion.
Statische Variablen kann nur definiert werden als Skalare oder als Skalare
Ausdruck (seit PHP 5.6). Die Zuordnung anderer Werte, die einen unweigerlich
führt zu einem Fehler, zumindest in dem moment, als dieser Artikel geschrieben wurde.
Dennoch sind Sie in der Lage zu tun, also einfach auf die nächste Zeile des Codes:
Ergebnis:
Statische Funktion ist irgendwie 'gemeinsame' zwischen den Methoden von Objekten des
gleichen Klasse. Es ist leicht zu verstehen, betrachten Sie das folgende Beispiel:
Funktioniert dies nur mit Objekten der selben Klasse. Wenn Objekte aus verschiedenen Klassen (auch anderen) Verhalten von statischen vars werden als erwartet.
Ist die statische variable der einzige Weg, um Werte zwischen den aufrufen einer Funktion?
Ein weiterer Weg, um Werte zwischen den Funktionsaufrufen ist die Verwendung von Verschlüssen. Verschlüsse wurden eingeführt in PHP 5.3. In zwei Worten, Sie ermöglichen es Ihnen, um den Zugriff auf einen Satz von Variablen innerhalb einer Funktion Gültigkeitsbereich eine weitere anonyme Funktion, dass wird der einzige Weg sein, auf Sie zuzugreifen. In closure-Variablen können imitieren (mehr oder weniger erfolgreich) OOP-Konzepte wie 'Klasse Konstanten' (wenn Sie übergeben wurden, Verschluss-by-value) oder "private properties" (wenn die by reference übergeben) in strukturierter Programmierung.
Letzteres ja erlaubt zu verwenden, Verschlüsse, anstelle von statischen Variablen. Was zu verwenden ist immer bis zum Entwickler, zu entscheiden, aber es sollte erwähnt werden, dass statische Variablen sind auf jeden Fall nützlich bei der Arbeit mit rekursionen und verdient bemerkt zu werden, die von devs.
InformationsquelleAutor alex_edev
Werde ich nicht erlaubt, eine vollständige Antwort auf die Frage, wie die bestehenden und die PHP-Handbuch machen einen tollen job zu erklären, die meisten dieser.
Aber ein Thema, das vermisst wurde, war, dass der superglobals, einschließlich der allgemein verwendeten
$_POST
,$_GET
,$_SESSION
usw. Diese Variablen sind arrays, die immer verfügbar sind, in jedem Bereich, ohne einenglobal
Erklärung.Zum Beispiel diese Funktion gibt den Namen des Benutzers ausgeführt wird das PHP-Skript. Die variable ist verfügbar, um die Funktion ohne Probleme.
Die Allgemeine Regel von "globals" schlecht sind" ist in der Regel geändert, PHP zu "globals sind schlecht, aber superglobals sind in Ordnung", solange man nicht missbrauchen. (All diese Variablen beschreibbar sind, so könnten Sie verwendet werden, um zu vermeiden, dependency injection, wenn Sie waren wirklich schrecklich.)
Diese Variablen sind nicht unbedingt vorhanden sein; ein administrator kann deaktivieren einige oder alle von Ihnen mit der
variables_order
- Direktive inphp.ini
, aber das ist nicht üblich Verhalten.Eine Liste der aktuellen superglobals:
$GLOBALS
- Alle globalen Variablen des aktuellen Skripts$_SERVER
- Informationen über server und Ausführungsumgebung$_GET
- Werte in den query-string der URL, unabhängig von der HTTP-Methode der Anfrage$_POST
- Werte übergeben, die in einer HTTP POST-Anforderung mitapplication/x-www-form-urlencoded
odermultipart/form-data
MIME-Typen$_FILES
- Dateien übergeben, die in einer HTTP POST-Anforderung mit einermultipart/form-data
MIME-Typ$_COOKIE
- Cookies übergeben, die mit der aktuellen Anfrage$_SESSION
- Session-Variablen gespeichert, die intern von PHP$_REQUEST
- In der Regel eine Kombination von$_GET
und$_POST
, aber manchmal$_COOKIES
. Der Inhalt wird bestimmt durch dierequest_order
- Direktive inphp.ini
.$_ENV
- Die environment-Variablen des aktuellen SkriptsInformationsquelleAutor miken32