web-dev-qa-db-ger.com

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

Ich versuche, eine Variable von einer Include-Datei an eine andere zu übergeben. Dies funktioniert nur, wenn ich die Variable in der zweiten Include-Datei als global deklariere. Ich muss es jedoch 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 globales $ name deklariere, bevor $ name in end.inc zurückgegeben wird, funktioniert es ordnungsgemäß. Die akzeptierte Antwort auf diesen Beitrag erklärt, dass dies von Ihrer Serverkonfiguration abhängt: Übergeben von Variablen in PHP von einer Datei zu einer anderen

Ich benutze einen Apache-Server. Wie würde ich es so konfigurieren, dass es nicht notwendig ist, $ name als global zu deklarieren? Gibt es Vor- und Nachteile gegenüber den anderen?

69
maxedison

Beim Einfügen von Dateien in PHP verhält es sich so, als ob der Code in der Datei vorhanden wäre, aus der sie eingefügt werden. Stellen Sie sich vor, Sie kopieren den Code aus jeder Ihrer enthaltenen Dateien und fügen ihn direkt in Ihr index.php. So funktioniert PHP mit Includes.

In Ihrem Beispiel haben Sie eine Variable namens $name in deinem front.inc Datei und dann beide front.inc und end.inc in deinem index.php, können Sie echo die Variable $name irgendwo nach dem include von front.inc in deinem index.php. Wieder verarbeitet PHP Ihr index.php als ob der Code aus den zwei Dateien, die Sie einschließen, Teil der Datei ist.

Wenn Sie ein echo in eine eingeschlossene Datei in einer Variablen einfügen, die nicht in sich selbst definiert ist, erhalten Sie kein Ergebnis, da sie separat behandelt wird als jede andere eingeschlossene Datei.

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

56

Hier ist eine Falle zu vermeiden. Wenn Sie innerhalb einer Funktion auf Ihre Variable $ name zugreifen müssen, müssen Sie "globaler $ 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();

wird nur Fehler anzeigen. Der richtige Weg dazu wäre:

include('front.inc');

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

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

foo();
bar();
29
Kağan Kayal