8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaye vainement de comprendre la portée des variables globales en PHP, mais quelque chose m'échappe...


<?php
$flag = 0;
function coucou() {
  $flag = 1;
  global $flag;
}

coucou();
echo $flag;
?>


Avec global, je m'attendrais à ce que la variable passe à 1 comme j'ai exécuté ma fonction et ai rendu la variable redéfinie globale. Or, le résultat est 0.

Autre test :

<?php
$flag = 0;
function coucou() {
  $GLOBALS['flag'] = 1;
}
coucou();
echo $flag;
?>


Avec $GLOBALS[], j'obtiens, comme il se doit, 1.

Mais je ne parviens pas à percevoir quelle différence il y a entre global et $GLOBAL[]...
Quelqu'un peut-il m'éclairer à ce sujet svp?

Merci Smiley smile
Bonsoir,

'global' doit etre placé AVANT la variable.

Sur le lien que vous indiquez, vous noterez que 'global' dans la fonction, est placé avant la variable.


<?php
  $a = 1;
  $b = 2;
  function somme() {
      global $a, $b; // 1ere ligne de la fonction
      $b = $a + $b;
  }
  somme();
  echo $b; // affiche 3

// **************************************

// 1)  ---------
$flag = 0;
function coucou() {
  $flag = 1;
  global $flag; 
}
coucou();
echo $flag; // affiche 0

// 2)  ---------
$flag2 = 0;
function coucou2() {
  global $flag2;
  $flag2 = 1;
}
coucou2();
echo $flag2; // affiche 1

// 3)  ---------
$flag3 = 0;
function coucou3() {
  $flag3 = 1;
  global $flag3; 
  $flag3 = 1; // ligne ajoutee APRES 'global'
}
coucou3();
echo $flag3; // affiche 1
?>
Meilleure solution
Okaaaay !
Un grand merci, Alain.

Maintenant, il ne me reste qu'à savoir s'il y a une différence entre les deux écritures et s'il y en a une plus ou moins sécurisée que l'autre...
J'ai souvent entendu d'éviter au max les variables globales, si bien que je ne sais pas trop si et comment déjouer ce piège éventuel.

Encore merci.