Laravel 5

variable local, variable global

  • Avatar de InformatiqueEurofrance
    Membre depuis :
    29/12/2016
    Messages :
    20

    Bonjour;
    dans une controleur j'ai une petite fonction :

    $a = 1;
    $b = 2;
    function somme() {
    global $a, $b;
    $b = $a + $b;
    }
    somme();
    echo $b;

    le résultat est 2 alors que je m'attendais à 3 comme ici :
    http://php.net/manual/fr/language.variables.scope.php
    Pourquoi ? et comment avoir le résultat attendu.

    Merci

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1314

    Bonsoir,

    Normalement le résultat est 3, c'est quelle version de PHP ?

    Par ailleurs c'est plutôt à éviter ce genre de variable globale...

  • Avatar de InformatiqueEurofrance
    Membre depuis :
    29/12/2016
    Messages :
    20

    Bonjour;

    Dans mon cas, il s'agit d'une petite fonction d'intéret uniquement local pour éviter de répéter plusieurs fois un morceau de code, d'où l'usage de global.
    Ma version de php PHP Version 5.5.9-1ubuntu4.20. Mais j'utilise ce serveur pour d'autres projets qui ne sont pas laravel où je n'ai pas ce problème.

  • Avatar de AndrianMihailov
    Membre depuis :
    10/01/2017
    Messages :
    1

    Bonjour,

    essayez :

    global $b;
    $a = 1;
    $b = 2;

    function somme() {
    global $a, $b;
    $b = $a + $b;
    }

    somme();

    echo $b;
  • Avatar de InformatiqueEurofrance
    Membre depuis :
    29/12/2016
    Messages :
    20

    Avec le code suivant, on obtient 3. Mais, je ne comprends pas pourquoi, il faut définir les variables comme global en dehors de ma fonction. Est ce que ces variables ne risques pas de devenir disponible en dehors de mon contrôleur ? Une petite explication ?

    global $b,$a;
    $a = 1;
    $b = 2;
    function somme() {
    global $a, $b;
    $b = $a + $b;
    }
    somme();
    echo $b;
  • Avatar de InformatiqueEurofrance
    Membre depuis :
    29/12/2016
    Messages :
    20

    Après réflection, vu que le controleur est une class il est probablement beaucoup plus élégant de définir la fontion et les variables comme "private" au niveau de la classe.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1314

    De mon point de vue on peut (et on doit) toujours éviter les globales, et pas seulement en PHP :)

Vous ne pouvez pas répondre à ce sujet.