Übergabe einer Variablen von einer PHP-Include-Datei an eine andere: global vs. not

Lesezeit: 6 Minuten

Ubergabe einer Variablen von einer PHP Include Datei an eine andere global
maxedison

Ich versuche, eine Variable von einer Include-Datei an eine andere zu übergeben. Dies funktioniert NICHT, es sei denn, ich deklariere die Variable in der zweiten Include-Datei als global. Allerdings muss ich es in der Datei, die das erste Include aufruft, NICHT als global deklarieren. Beispielsweise:


front.inc:

$name="james";

index.php:

include('front.inc');
echo $name;
include('end.inc');

Ausgabe: James


end.inc:

echo $name;

Ausgabe: nichts


WENN ich den globalen $name deklariere, bevor ich $name in end.inc wiedergebe, dann funktioniert es richtig. Die akzeptierte Antwort auf diesen Beitrag erklärt, dass dies von Ihrer Serverkonfiguration abhängt: Variablen in PHP von einer Datei zur anderen übergeben

Ich verwende einen Apache-Server. Wie würde ich es konfigurieren, damit es nicht erforderlich ist, $name als global zu deklarieren? Gibt es Vor-/Nachteile gegenüber dem anderen?

  • Includes sind keine Funktionen. include unterbricht nicht den Gültigkeitsbereich der Variablen. Es ist, als ob Sie den Inhalt der Include-Dateien direkt in das aufrufende Skript kopieren und einfügen würden.

    – dqhendricks

    13. Januar 11 um 1:32 Uhr

  • ist das Echo in end.inc innerhalb einer Funktion?

    – dqhendricks

    13. Januar 11 um 1:32 Uhr

  • das würde den Gültigkeitsbereich der Variablen sprengen. und in diesem Fall sollten Sie $name wahrscheinlich in einem Argument an die Funktion übergeben.

    – dqhendricks

    13. Januar 11 um 1:34 Uhr


  • Dies sollen funktioniert wie geschrieben!

    – verzeihen

    13. Januar 11 um 1:36 Uhr

  • Das Echo in end.inc befindet sich nicht in einer Funktion. Nehmen Sie an, dass die drei Dateien, die ich oben beschrieben habe, nicht mehr und nicht weniger enthalten als genau das, was ich geschrieben habe.

    – maxedison

    14. Januar 11 um 21:01 Uhr

Ubergabe einer Variablen von einer PHP Include Datei an eine andere global
Michael Irigoyen

Die übergeordnete Datei hat Zugriff auf Variablen in beiden eingeschlossenen Dateien

Beim Einbinden von Dateien in PHP verhält es sich so, als wäre der Code in der Datei vorhanden, aus der sie eingebunden werden. Stellen Sie sich vor, Sie kopieren und fügen den Code aus jeder Ihrer enthaltenen Dateien direkt in Ihre ein index.php. So arbeitet PHP mit Includes.

Also, in Ihrem Beispiel, da Sie eine Variable namens gesetzt haben $name in deinem front.inc Datei und schloss dann beide ein front.inc und end.inc in deinem index.phpwirst du können echo Die Variable $name irgendwo nach dem include von front.inc in deinem index.php. Auch hier verarbeitet PHP Ihre index.php als wäre der code aus den beiden dateien die du einbindest Teil der Datei.

Die eingeschlossene Datei hat keinen Zugriff auf die andere eingeschlossene Datei

Wenn Sie ein platzieren echo innerhalb einer eingebundenen Datei auf eine Variable, die nicht in sich selbst definiert ist, erhalten Sie kein Ergebnis, da sie separat behandelt wird als jede andere eingebundene Datei.

Mit anderen Worten, um das erwartete Verhalten auszuführen, müssen Sie es als global definieren.

  • Deine Antwort scheint sich zu widersprechen. Sie haben ein paar Mal gesagt, dass das Einfügen einer Datei dasselbe ist, als ob der gesamte Code einfach Teil einer Datei wäre. Daher würde das, was ich in meinem Beitrag beschrieben habe, äquivalent zu: $name = ‘james’; echo $name; echo $name; — Das sollte Jamesjames produzieren. Aber Ihr vorletzter Absatz widerspricht dem, was ich gerade beschrieben habe. Vielleicht meinen Sie, dass NUR die Datei, die den Include-Aufruf durchführt, Zugriff auf die Variablen der eingeschlossenen Datei hat, sodass andere eingeschlossene Dateien KEINEN Zugriff auf diese Variablen haben. Ist das korrekt?

    – maxedison

    14. Januar 11 um 21:00 Uhr

  • Ja, das klingt richtig. Entschuldigung, wenn ich das, was ich gesagt habe, verwirrend war. Ich habe es ungefähr 5 Mal bearbeitet, weil es mir wirklich schwer fiel, den Prozess zu beschreiben, ohne dass Sie sich verlaufen. Die übergeordnete Datei hat also Zugriff auf Variablen in beiden eingeschlossenen Dateien, aber die eingeschlossene Datei hat keinen Zugriff auf die andere eingeschlossene Datei. Falls das Sinn macht.

    – Michael Irigoyen

    14. Januar 11 um 21:10 Uhr

  • Abgestimmt, weil die ersten beiden Absätze dem folgenden Satz ausdrücklich widersprechen.

    – Mucke

    10. Dezember 18 um 7:31 Uhr

  • @JoshuaFlood Ich habe Teile des Kommentars des Autors als Überschriften für die beiden Teile der Antwort hinzugefügt, um die Antwort klarer zu machen und Verwirrung beim Lesen zu vermeiden.

    – Gleb Kemarsky

    30. August 21 um 7:19 Uhr

  • Geändert zu einer Upvote @GlebKemarsky

    – Mucke

    13. Oktober 21 um 12:13 Uhr

Ubergabe einer Variablen von einer PHP Include Datei an eine andere global
Kağan Kayal

Hier ist eine Falle zu vermeiden. Falls Sie innerhalb einer Funktion auf Ihre Variable $name zugreifen müssen, müssen Sie “global $name;” sagen. am Anfang dieser Funktion. Sie müssen dies für jede Funktion in derselben Datei wiederholen.

include('front.inc');
global $name;

function foo() {
  echo $name;
}

function bar() {
  echo $name;
}

foo();
bar();

zeigt nur Fehler an. Der richtige Weg dazu wäre:

include('front.inc');

function foo() {
  global $name;
  echo $name;
}

function bar() {
  global $name;
  echo $name;
}

foo();
bar();

  • Mit anderen Worten: schreiben global $var bevor Sie es in einer anderen Funktion verwenden.

    – Chris Glücklich

    30. Juni 17 um 0:51 Uhr

1644316568 660 Ubergabe einer Variablen von einer PHP Include Datei an eine andere global
Paul Appleby

Das ist alles, was Sie tun müssen:

Vorne inkl

global $name;
$name="james";

  • Fügen Sie eine Erklärung mit der Antwort hinzu, wie diese Antwort OP bei der Behebung des aktuellen Problems hilft

    – ρяσѕρєя K

    18. Januar 17 um 4:31 Uhr

  • Ich hatte das gleiche Problem wie von maxedison beschrieben. Ich war auch mit vielen Antworten verwirrt: “php process include like you copy and paste …”, was nicht wahr ist, und dank Michaels Erklärung unter seiner Antwort verstehe ich, dass der Code in der eingeschlossenen Datei die in der vorherigen Include-Datei definierte globale Variable nicht erkennt . Bei meinen Experimenten habe ich auch festgestellt, dass ich dies korrigieren kann, wenn ich das Schlüsselwort “global” im ersten Iclude verwende – wie Paul antwortete. Aber wo finde ich beide in der PHP-Dokumentation beschriebenen Fälle? Und die zweite Frage ist, ob beide nicht nur von einer PHP-Version wahr sind?

    – StackPeter

    20. Februar 17 um 11:19 Uhr

Das gleiche hier mit PHP 5.4.7

$mysql = false;
include("inc_mysql.php");
echo($mysql);

Wo inc_mysql.php:

$mysql = true;

Gibt einen Wert von $mysql = false zurück;

ABER

wenn Sie das erste entfernen $mysql=false;

include("inc_mysql.php");
echo($mysql);

Gibt einen Wert von $mysql = true aus;

SO definitiv ist das Ausführen eines Include NICHT wie das Kopieren/Einfügen von Code, zumindest in einigen PHP-Versionen.

Es geht um Reichweite. Es scheint, dass in PHP die im globalen Geltungsbereich definierten Variablen nicht automatisch im Geltungsbereich der Funktion vererbt werden. Deshalb müssen Sie innerhalb eines Funktionskörpers der Variablen das voranstellen global Stichwort.

Aus dem PHP-Handbuch:

Eine echte globale Variable, die innerhalb eines Funktionsbereichs mit der globalen Anweisung importiert wird, erstellt tatsächlich einen Verweis auf die globale Variable.

Also die Variable $name ist für beide Includes verfügbar (front.inc und end.inc ), aber jede in diesen Dateien definierte Funktion hätte keinen Zugriff auf die Variable $name es sei denn, die global Schlüsselwort verwendet wird oder die $GLOBALS Konstante.

Ich habe etwas Code von gepackt https://www.php.net/manual/en/language.variables.scope.php um dieses Problem besser zu verstehen:

<?php
$a = 1; /* global scope */ 

function test()
{
    /* the code below will throw a Warning: Undefined variable $a ... */
    echo $a; /* reference to local scope variable */
} 

Um den Variablenwert zu erhalten, müssen Sie global $a wie folgt aufrufen:

<?php
$a = 2; /* global scope */

function test2() {
    global $a;
    /* now we have access to the global $a so no more warnings */
    echo $a;
}

Darauf können Sie sich auch verlassen $GLOBALS So erhalten Sie Zugriff auf das Global:

<?php
$a = 3; /* global scope */

function test3() {
    echo $GLOBALS['a'];
}

Sie können eine Liste aller globalen Variablen mit einem Code wie diesem erhalten:

echo "<pre>";
print_r($GLOBALS);
echo "</pre>";

Quelle für obigen Code: Ist es möglich, alle globalen Variablen in PHP aufzulisten?

.

821570cookie-checkÜbergabe einer Variablen von einer PHP-Include-Datei an eine andere: global vs. not

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy