79 votes

Passer une variable d'un fichier d'inclusion php à un autre: global vs non

Je suis en train de passer une variable à partir d'un fichier d'inclusion à l'autre. Ce n'est PAS de travail, à moins que je déclarer la variable comme globale dans le deuxième fichier include. Cependant, je n'ai PAS besoin de la déclarer comme globale dans le fichier qui est à l'appel de la première inclure. Par exemple:


avant.inc:

$name = 'james';

index.php:

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

sortie: james


fin.inc:

echo $name;

sortie: rien


SI je déclare global $nom avant l'écho $nom en fin.inc, alors qu'il fonctionne correctement. La accepté de répondre à ce post explique que cela dépend de la configuration de votre serveur: Passer des variables en PHP à partir d'un fichier à l'autre

Je suis sur un serveur Apache. Comment pourrais-je le configurer de façon à ce que la déclaration d' $nom global n'est pas nécessaire? Existe-il des avantages ou des inconvénients pour l'un contre l'autre?

64voto

Michael Irigoyen Points 11056

Lors de l'inclusion de fichiers en PHP, il agit comme le code existe dans le fichier qu'ils sont inclus à partir de. Imaginez copier et de coller le code à partir de chacun de vos fichiers inclus directement dans votre index.php. C'est le fonctionnement de PHP avec la comprend.

Donc, dans votre exemple, puisque vous avez défini une variable nommée $name votre front.inc le fichier, puis inclus à la fois l' front.inc et end.inc votre index.php, vous serez en mesure d' echo la variable $name n'importe où après l' include de front.inc au sein de votre index.php. Encore une fois, processus PHP votre index.php comme si le code à partir de deux fichiers que vous êtes une partie du fichier.

Lorsque vous placez un echo dans un fichier inclus, pour une variable qui n'est pas définie à l'intérieur de lui-même, vous n'allez pas pour obtenir un résultat parce qu'il est traité séparément de tout autre fichier inclus.

En d'autres termes, pour faire le comportement que vous attendez, vous aurez besoin de le définir comme un mondiale.

34voto

user939280 Points 181

Voici un piège à éviter. Si vous avez besoin d'accéder à votre variable $ name dans une fonction, vous devez dire "global $ name;" au début de cette fonction. Vous devez répéter cette opération pour chaque fonction du même fichier.

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

function foo() {
  echo $name;
}

function bar() {
  echo $name;
}

foo();
bar();
 

ne montrera que des erreurs. La bonne façon de faire serait:

 include('front.inc');

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

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

foo();
bar();
 

-1voto

jim smith Points 375

Je viens d'avoir ce problème, il s'est avéré que c'était parce que j'utilisais require_once et que j'ai inclus le même fichier deux fois, ce qui a permis de définir la variable après la première instance incluse

comme ça

 require_once("file.php");

$var = "sandwich";

require_once("file.php");
 

Ne fonctionnera pas! $var ne sera pas défini en file.php.

-12voto

Michael Mac Points 21

J'ai une solution étrange à cela. dans le fichier end.inc , ajoutez cette ligne:

 $name=$name;
 

Ensuite, l'écho fonctionnerait.

J'ai eu recours à cette solution dans mon projet, sans une bonne explication, pourquoi cela fonctionnait de la sorte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X