web-dev-qa-db-fra.com

Récupère les variables de l'extérieur, à l'intérieur d'une fonction dans PHP

J'essaie de comprendre comment je peux utiliser une variable, qui a été définie à l'extérieur d'une fonction, à l'intérieur. Y a-t-il une manière de faire ça? J'ai essayé de définir la variable sur "global" mais cela ne semble pas fonctionner comme prévu.

Un exemple simple de mon code

$var = '1';

function() {
$var + 1;
return $var;
}

je veux cela, pour retourner la valeur de 2.

28
Henrikz

Vous devrez utiliser le mot-clé global dans votre fonction. http://php.net/manual/en/language.variables.scope.php

[~ # ~] modifier [~ # ~] (embarrassé, j'ai oublié cela, grâce aux commentateurs)

... et stockez le résultat quelque part

$var = '1';
function() {
    global $var;
    $var += 1;   //are you sure you want to both change the value of $var
    return $var; //and return the value?
}
54
Jesse Cohen

Les globaux feront l'affaire mais sont généralement bons à éviter. Dans les programmes plus importants, vous ne pouvez pas être certain de leur comportement, car ils peuvent être modifiés n'importe où dans l'ensemble du programme. Et tester du code qui utilise des globaux devient très difficile.

Une alternative est d'utiliser une classe.

class Counter {
    private $var = 1;

    public function increment() {
        $this->var++;
        return $this->var;
    }
}

$counter = new Counter();
$newvalue = $counter->increment();
10
Jacob
$var = 1;

function() {
  global $var;

  $var += 1;
  return $var;
}

OR

$var = 1;

function() {
  $GLOBALS['var'] += 1;
  return $GLOBALS['var'];
}
5
Czechnology
$var = '1';
function addOne() use($var) {
   return $var + 1;
}
3
Chamandeep

Voir http://php.net/manual/en/language.variables.scope.php pour la documentation. Je pense que dans votre cas spécifique, vous n'obteniez pas les résultats souhaités parce que vous n'attribuez pas le $var + 1 opération à rien. Le calcul est effectué, puis jeté, essentiellement. Voir ci-dessous pour un exemple de travail:

$var = '1';

function addOne() {
   global $var;
   $var = $var + 1;
   return $var;
}
3
Nathan Anderson

Cette ligne dans votre fonction: $var + 1 ne changera pas la valeur attribuée à $var, même si vous utilisez le mot clé global.

Cependant, l'un ou l'autre de ces éléments fonctionnera: $var = $var + 1; ou $var += 1;

3
Brian Driscoll