38 votes

Récupérer des variables de l'extérieur, à l'intérieur d'une fonction en PHP

J'essaie de comprendre comment je peux utiliser une variable qui a été définie en dehors d'une fonction, à l'intérieur d'une fonction. Existe-t-il un moyen de le faire ? J'ai essayé de définir la variable comme "globale", mais cela ne semble pas fonctionner comme prévu.

Un exemple simple de mon code

$var = '1';

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

Je veux que cela renvoie la valeur 2.

67voto

Jesse Cohen Points 2663

Vous devrez utiliser le mot-clé global à l'intérieur de votre fonction. http://php.net/manual/en/language.variables.scope.php

EDIT (embarrassé, j'ai négligé ce point, merci aux commentateurs)

...et stocker 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?
}

16voto

Jacob Points 6093

Les globaux peuvent faire l'affaire mais il est généralement préférable de ne pas les utiliser. Dans les programmes plus importants, vous ne pouvez pas être certain de leur comportement car ils peuvent être modifiés n'importe où dans le programme. Et tester du code qui utilise des globaux devient très difficile.

Une autre solution consiste à utiliser une classe.

class Counter {
    private $var = 1;

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

$counter = new Counter();
$newvalue = $counter->increment();

6voto

Czechnology Points 8031
$var = 1;

function() {
  global $var;

  $var += 1;
  return $var;
}

OU

$var = 1;

function() {
  $GLOBALS['var'] += 1;
  return $GLOBALS['var'];
}

5voto

Chamandeep Points 79
$var = '1';
function addOne() use($var) {
   return $var + 1;
}

3voto

Brian Driscoll Points 10188

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

L'un ou l'autre fonctionnera cependant : $var = $var + 1; o $var += 1;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X