web-dev-qa-db-fra.com

Changer une variable globale depuis l'intérieur d'une fonction PHP

J'essaye de changer une variable qui est en dehors d'une fonction, de l'intérieur d'une fonction. Parce que si la date que la fonction vérifie dépasse un certain montant, j'en ai besoin pour changer l'année de la date au début du code.

$var = "01-01-10";
function checkdate(){
     if("Condition"){
            $var = "01-01-11";
      }
}
37
Chris Bier

A. Utilisez le mot clé global pour importer à partir de la portée de l'application.

$var = "01-01-10";
function checkdate(){
    global $var;  
    if("Condition"){
        $var = "01-01-11";
    }
}
checkdate();

B. Utilisez le tableau $ GLOBALS .

$var = "01-01-10";
function checkdate(){
    if("Condition"){
        $GLOBALS['var'] = "01-01-11";
    }
}
checkdate();

C. Passez la variable par référence .

$var = "01-01-10";
function checkdate(&$funcVar){  
    if("Condition"){
        $funcVar = "01-01-11";
    }
}
checkdate($var);
50
Alin Purcaru

Utilisez simplement le mot clé global comme ceci:

$var = "01-01-10";
function checkdate(){
     global $var;

     if("Condition"){
            $var = "01-01-11";
      }
}

Toute référence à cette variable sera alors à la variable globale.

44
Buggabill

Toutes les réponses ici sont bonnes, mais ... êtes-vous sûr de vouloir faire cela?

Changer des variables globales à partir de fonctions est généralement une mauvaise idée, car cela peut très facilement provoquer le code spaghetti, où les variables sont modifiées dans tout le système, les fonctions sont interdépendantes, etc. C'est un vrai gâchis.

Veuillez me permettre de suggérer quelques alternatives:

1) Programmation orientée objet

2) La fonction renvoie une valeur qui est attribuée par l'appelant.

par exemple. $ var = checkdate();

3) Avoir la valeur stockée dans un tableau qui est passé dans la fonction par référence

fonction checkdate (& $ values) {if (condition) {$ values ​​["date"] = "01-01-11"; }}

J'espère que cela t'aides.

8
Douglas Muth

Essayez ce pass par référence

  $var = "01-01-10";
    function checkdate(&$funcVar){  
        if("Condition"){
            $funcVar = "01-01-11";
        }
    }
    checkdate($var);

ou Essayez la même chose que ci-dessus, en gardant la fonction identique.

 $var = "01-01-10";
    function checkdate($funcVar){  
        if("Condition"){
            $funcVar = "01-01-11";
        }
    }
    checkdate(&$var);
5
rizon