Passar uma variável de um php include arquivo para outro: global versus não

Estou tentando passar uma variável de um arquivo de inclusão para outro. Isso NÃO está funcionando a menos que eu declare a variável como global no segundo arquivo de inclusão. No entanto, não preciso declará-lo como global no arquivo que está chamando o primeiro include. Por exemplo:


front.inc:

$name = 'james'; 

index.php:

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

saída: james


end.inc:

 echo $name; 

saída: nada


Se eu declarar $ $ global antes de fazer eco de $ name em end.inc, então ele funciona corretamente. A resposta aceita para esta publicação explica que isso depende da configuração do seu servidor: Passando variables ​​em PHP de um arquivo para outro

Estou usando um servidor Apache. Como eu configurarei para que a declaração de $ name seja global não é necessária? Existem vantagens / desvantagens para um versus o outro?

Ao include arquivos em PHP, ele funciona como o código existe dentro do arquivo que eles estão sendo incluídos. Imagine copiar e colar o código de dentro de cada um dos arquivos incluídos diretamente em seu index.php . É assim que o PHP funciona com os itens incluídos.

Então, no seu exemplo, uma vez que você definiu uma variável chamada $name no seu arquivo front.inc e, em seguida, incluía front.inc e end.inc em seu index.php , você poderá echo a variável $name em qualquer lugar após a include do front.inc dentro do seu index.php . Novamente, o PHP processa seu index.php como se o código dos dois arquivos que você inclui seja parte do arquivo.

Quando você coloca um echo dentro de um arquivo incluído, para uma variável que não está definida dentro de si, você não irá obter um resultado porque é tratado separadamente, em seguida, qualquer outro arquivo incluído.

Em outras palavras, para fazer o comportamento que você espera, você precisará defini-lo como um global.

Aqui está uma armadilha para evitar. No caso de você precisar acessar o nome da variável $ dentro de uma function, você precisa dizer “nome global $”; no início dessa function. Você precisa repetir isso para cada function no mesmo arquivo.

 include('front.inc'); global $name; function foo() { echo $name; } function bar() { echo $name; } foo(); bar(); 

só mostrará erros. A maneira correta de fazer isso seria:

 include('front.inc'); function foo() { global $name; echo $name; } function bar() { global $name; echo $name; } foo(); bar(); 

Isso é tudo o que você precisa fazer:

Na frente

 global $name; $name = 'james'; 

Tenho uma solução estranha para isso. no arquivo end.inc , adicione esta linha:

 $name=$name; 

Então o eco funcionaria.

Acertei nesta solução no meu projeto, sem uma boa explicação por que funcionou assim.