Changing a global variable from inside a function PHP
Solution 1
A. Use the global keyword to import from the application scope.
$var = "01-01-10";
function checkdate(){
global $var;
if("Condition"){
$var = "01-01-11";
}
}
checkdate();
B. Use the $GLOBALS array.
$var = "01-01-10";
function checkdate(){
if("Condition"){
$GLOBALS['var'] = "01-01-11";
}
}
checkdate();
C. Pass the variable by reference.
$var = "01-01-10";
function checkdate(&$funcVar){
if("Condition"){
$funcVar = "01-01-11";
}
}
checkdate($var);
Solution 2
Just use the global
keyword like so:
$var = "01-01-10";
function checkdate(){
global $var;
if("Condition"){
$var = "01-01-11";
}
}
Any reference to that variable will be to the global one then.
Solution 3
All the answers here are good, but... are you sure you want to do this?
Changing global variables from within functions is generally a bad idea, because it can very easily cause spaghetti code to happen, wherein variables are being changed all over the system, functions are interdependent on each other, etc. It's a real mess.
Please allow me to suggest a few alternatives:
1) Object-oriented programming
2) Having the function return a value, which is assigned by the caller.
e.g. $var = checkdate();
3) Having the value stored in an array that is passed into the function by reference
function checkdate(&$values) { if (condition) { $values["date"] = "01-01-11"; } }
Hope this helps.
Solution 4
Try this pass by reference
$var = "01-01-10";
function checkdate(&$funcVar){
if("Condition"){
$funcVar = "01-01-11";
}
}
checkdate($var);
or Try this same as the above, keeping the function as same.
$var = "01-01-10";
function checkdate($funcVar){
if("Condition"){
$funcVar = "01-01-11";
}
}
checkdate(&$var);
Related videos on Youtube
Chris Bier
Jesus is my life! Please read John chapter 3 in the Bible :) Web Developer & Graphic Designer HTML, CSS, Javascript, PHP
Updated on February 17, 2020Comments
-
Chris Bier about 4 years
I am trying to change a variable that is outside of a function, from within a function. Because if the date that the function is checking is over a certain amount I need it to change the year for the date in the beginning of the code.
$var = "01-01-10"; function checkdate(){ if("Condition"){ $var = "01-01-11"; } }
-
Chris Bier over 13 yearsbut i want to change the global variable so whatever i set var to, will it effect the global variable outside of the function?
-
Buggabill over 13 yearsThat is what this will do. Using
global
changes the variable$var
inside the function to point to the global one. When you change that variable inside the function, it will change the global one. -
Jeromy French almost 10 yearsFor the third example (C), should the first and last lines reference $var or $funcVar...or should that last line be
$var = checkdate($var);
? -
Alin Purcaru almost 10 years@JeromyFrench The first and last line refer to the variable in the outer scope, named
$var
. Inside the function it may have any other name, so I chose$funcVar
specifically to illustrate that the name may be different. Regarding$var = checkdate($var);
, the whole purpose of the example was to show passing by reference and changing the passed variable directly in the function. -
Jeromy French almost 10 yearsOk, I think I get it.
function checkdate(&$funcVar)
combined withcheckdate($var);
maps the outer$var
to the inner$funcVar
. -
Joniale about 4 yearsThere is also another option, you pass a class/object variable to your function, then it will be passed by reference. See stackoverflow.com/a/9696799/5842403 to avoid this you have to clone it
-
M_per over 2 yearsAnother option would be to use class/object value inside a method, and reference to it by $object->var or by Class:$var