Changing a global variable from inside a function PHP

87,842

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);
Share:
87,842

Related videos on Youtube

Chris Bier
Author by

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, 2020

Comments

  • Chris Bier
    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
    Chris Bier over 13 years
    but i want to change the global variable so whatever i set var to, will it effect the global variable outside of the function?
  • Buggabill
    Buggabill over 13 years
    That 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
    Jeromy French almost 10 years
    For 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
    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
    Jeromy French almost 10 years
    Ok, I think I get it. function checkdate(&$funcVar) combined with checkdate($var); maps the outer $var to the inner $funcVar.
  • Joniale
    Joniale about 4 years
    There 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
    M_per over 2 years
    Another option would be to use class/object value inside a method, and reference to it by $object->var or by Class:$var