Passing a variable from one php include file to another: global vs. not
Solution 1
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.
Solution 2
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();
Solution 3
This is all you have to do:
In front.inc
global $name;
$name = 'james';
Solution 4
Same here with php 5.4.7
$mysql = false;
include("inc_mysql.php");
echo($mysql);
Where inc_mysql.php:
$mysql = true;
Echoes a value of $mysql = false;
BUT
if you remove the first $mysql=false;
include("inc_mysql.php");
echo($mysql);
Echoes a value of $mysql = true;
SO definitively, doing an include IS NOT like copying/pasting code, at least, in some PHP versions.
Related videos on Youtube
maxedison
Updated on July 05, 2022Comments
-
maxedison almost 2 years
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?
-
dqhendricks over 13 yearsincludes are not like functions. includes do not break the variable scope. it's as if you copy pasted the include files contents directly into the calling script.
-
dqhendricks over 13 yearsis the echo in end.inc within a function?
-
dqhendricks over 13 yearsthat would break the variable scope. and in that case you should probably pass $name to the function in an argument.
-
Gromski over 13 yearsThis should work as written!
-
maxedison over 13 yearsthe echo in end.inc is not inside a function. Assume that the three files I described above contain no more and no less than exactly what I wrote.
-
Trilarion about 9 yearsThis works now as intented. At least for me with XAMPP and PHP 5.6. It must have been an error of earlier php versions then??
-
StackPeter about 7 yearsI am playing with it again even I have written below comment about that I had the same problem. More precisely I had this problem on large existing web, but when I create only simple three *.php files like maxedison described I don't have this problem and echo from end.inc displays value of $name. Maybe it is depending on some used PHP calls in web initialization ? Maxedison tolds something about server configuration which can be reason of this problem. I looked into attached link, but did not find anything about server configuration. Can somebody bring more light on this problem ?
-
-
maxedison over 13 yearsYour response seems to contradict itself. You said a couple times that including a file is the same as if all the code was simply part of one file. Therefore, what I described in my post would be equivalent to: $name = 'james'; echo $name; echo $name; -- That should produce jamesjames. But your second-to-last paragraph contradicts what I just described. Perhaps what you mean is that ONLY the file making the include call has access to the included file's variables, so other included files do NOT have access to those variables. Is that correct?
-
Michael Irigoyen over 13 yearsYeah, that sounds correct. Sorry if I what I said was confusing. I edited it like 5 times because I was having a really hard to describing the process without getting you lost. So, the parent file has access to variables in both included files, but the included file doesn't have access to the other included file. If that makes any sense.
-
ρяσѕρєя K over 7 yearsAdd some explanation with answer for how this answer help OP in fixing current issue
-
StackPeter about 7 yearsI had the same problem like described by maxedison. I was also confused with many answers: "php process includes like you copy and paste..." which is not true and thanks to Michael's explanation under his answer I understand that code in included file does not recognize global variable defined in previous include file. In my experiments I also met that if I use "global" keyword in first iclude can correct this - like answered Paul. But where can I find both cases described in PHP documentation ? And second question is if both are not true only from some PHP version ?
-
Chris Happy almost 7 yearsIn other words: write
global $var
before you use it in another function. -
biscuitstack over 5 yearsAs well as the accepted answer, its correction is also wrong (or outdated). In PHP7 (at least) I can define a variable in
included1.php
and reference it later inincluded2.php
without referencing it inparent.php
, and get the the value I defined inincluded1.php
. I follow the same scope rules that I would if the code was all on a single page. Nothing more. -
Muckee over 5 yearsVoted down because the first two paragraphs contradict the following sentence explicitly.
-
John over 3 yearsIn short: throw your included file in to a function and pass the needed variables as parameters. It's obnoxious but it works. 😒︀
-
Ice Bear about 3 yearsI like this sentence 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. I discovered this when I was learning PHP. Then I see this to make it even clear that what I thought was right. THanks!
-
Gleb Kemarsky over 2 years@JoshuaFlood I've add parts of the author's comment as headers for the two parts of the answer to make the answer clearer and to avoid confusion when reading it.
-
Muckee over 2 yearsChanged to an upvote @GlebKemarsky