web-dev-qa-db-fra.com

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

J'essaie de passer une variable d'un fichier d'inclusion à un autre. Cela ne marche PAS sauf si je déclare la variable comme globale dans le deuxième fichier include. Cependant, je n'ai PAS besoin de le déclarer global dans le fichier qui appelle le premier include. Par exemple:


front.inc:

$name = 'james';

index.php:

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

sortie: james


end.inc:

echo $name;

sortie: rien


Si je déclare le nom global $ name avant l'écho de $ name dans end.inc, cela fonctionnera correctement. La réponse acceptée à cet article explique que cela dépend de la configuration de votre serveur: Passage de variables dans PHP d'un fichier à un autre

J'utilise un serveur Apache. Comment pourrais-je le configurer pour que déclarer $ name global ne soit pas nécessaire? Y a-t-il des avantages/inconvénients pour l'un par rapport à l'autre?

69
maxedison

Lorsque vous incluez des fichiers en PHP, cela signifie que le code existe dans le fichier à partir duquel ils ont été inclus. Imaginez copier et coller le code directement dans chacun de vos fichiers inclus dans votre index.php. C’est ainsi que PHP fonctionne avec includes.

Donc, dans votre exemple, puisque vous avez défini une variable appelée $name dans votre front.inc fichier, puis inclus à la fois front.inc et end.inc dans votre index.php, vous pourrez echo la variable $name _ n'importe où après le include de front.inc dans votre index.php. Encore une fois, PHP traite votre index.php _ comme si le code des deux fichiers que vous incluez est ne partie du fichier.

Lorsque vous placez un echo dans un fichier inclus, dans une variable qui n'est pas définie en lui-même, vous n'obtiendrez pas de résultat car il est traité séparément, puis dans tout autre fichier inclus.

En d’autres termes, pour adopter le comportement que vous attendez, vous devrez le définir en tant que global.

56
Michael Irigoyen

Voici un écueil à é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();
29
Kağan Kayal