Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing a variable from one php include file to another: global vs. not

I'm trying to pass a variable from one include file to another. This is NOT working unless I declare the variable as global in the second include file. However, I do NOT need to declare it as global in the file that is calling the first include. For example:


front.inc:

$name = 'james';

index.php:

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

output: james


end.inc:

echo $name;

output: nothing


IF I declare global $name prior to echoing $name in end.inc, then it works properly. The accepted answer to this post explains that this depends on your server configuration: Passing variables in PHP from one file to another

I'm using an Apache server. How would I configure it so that declaring $name to be global is not necessary? Are there advantages/disadvantages to one vs. the other?

like image 389
maxedison Avatar asked Jan 13 '11 01:01

maxedison


People also ask

Why not use global variables PHP?

That's because variables aren't really global in PHP. The scope of a typical PHP program is one HTTP request. Session variables actually have a wider scope than PHP "global" variables because they typically encompass many HTTP requests.

What happens if an external file is included in a PHP script file using the include () function and the external file does not exist?

What happens if an external file is included in a PHP script file using the include() function and the external file does not exist? The PHP script will continue.

How can use global variable in another file in PHP?

If you include another php file, the included file will have access to all global variables. If you want to keep the value of some variable between page requests then you will need to store the value somewhere. The easiest places to store values are in cookies, sessions or a database.


3 Answers

The parent file has access to variables in both included files

When including files in PHP, it acts like the code exists within the file they are being included from. Imagine copy and pasting the code from within each of your included files directly into your index.php. That is how PHP works with includes.

So, in your example, since you've set a variable called $name in your front.inc file, and then included both front.inc and end.inc in your index.php, you will be able to echo the variable $name anywhere after the include of front.inc within your index.php. Again, PHP processes your index.php as if the code from the two files you are including are part of the file.

The included file doesn't have access to the other included file

When you place an echo within an included file, to a variable that is not defined within itself, you're not going to get a result because it is treated separately then any other included file.

In other words, to do the behavior you're expecting, you will need to define it as a global.

like image 158
Michael Irigoyen Avatar answered Oct 23 '22 16:10

Michael Irigoyen


Here is a pitfall to avoid. In case you need to access your variable $name within a function, you need to say "global $name;" at the beginning of that function. You need to repeat this for each function in the same file.

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

function foo() {
  echo $name;
}

function bar() {
  echo $name;
}

foo();
bar();

will only show errors. The correct way to do that would be:

include('front.inc');

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

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

foo();
bar();
like image 35
Kağan Kayal Avatar answered Oct 23 '22 16:10

Kağan Kayal


This is all you have to do:

In front.inc

global $name;
$name = 'james';
like image 2
Paul Appleby Avatar answered Oct 23 '22 16:10

Paul Appleby