Page 1 sur 1

Définir des variables globales

Posté : 04 mars 2006, 18:17
par alexbad
Salut,

Je souhaite simplement ressortir une variable d'une fonction. C'est-à-dire pouvoir la récupérer partout dans le script et cela, sans avoir recourt à un return qui est déjà utilisé.

Exemple :
<?php
function fsql_connexion($user, $pass)
{
	if (is_file('fsql/utilisateurs/' . $user . '.fsq'))
	{
		$fsql_user = $user;
	}
	else
	{
	echo 'L\'utilisateur ' . $user . ' n\'existe pas.';
	return 0;
	}
}


echo $fsql_user; //Très officiellement, une erreur est générée ici
?>
Ça je sais, ce n'est pas fonctionnel. J'ai lu sur les variables globales, j'ai essayé cela :
<?php
$fsql_user = 0;
function fsql_connexion($user, $pass)
{
	if (is_file('fsql/utilisateurs/' . $user . '.fsq'))
	{
		global $fsql_user;
		$fsql_user = $user;
	}
	else
	{
	echo 'L\'utilisateur ' . $user . ' n\'existe pas.';
	return 0;
	}
}


echo $fsql_user; //M'affiche 0 , donc la variable n'a pas été modifié
?>
Voilà, j'espère que ces deux exemples ont bien illustrés mon problème :)

Posté : 04 mars 2006, 20:05
par Cyrano
Et pourquoi tu ne créerais pas des variables de session ? Avec une session, tu pourrais les récupérer partout.

Posté : 04 mars 2006, 20:21
par Truc
je sais pas mais il me semble que chaque instruction d'un test if doit contenir un return ou du moins un pour la fonction.
Dans ton cas il n'y a qu'un return dans le else.

Un code du style ne fonctionnerai pas ?
function fsql_connexion($user, $pass)
{
    $fsql_user=0;

    if (is_file('fsql/utilisateurs/' . $user . '.fsq'))
    {
        $fsql_user = $user;
    }
    else
    {
        echo 'L\'utilisateur ' . $user . ' n\'existe pas.';    
    }
    return $fsql_user;
} 

Posté : 05 mars 2006, 00:05
par alexbad
J'ai songé aux sessions Cyrano, le problème c'est que les variables sont disponibles sur toutes les pages du domaine et ce n'est pas ce que je désire même que ça me poserait problème...

Truc, ta solution est bonne, mais comme j'ai dit, je préfère que ma fonction se comporte traditionnellement et qu'elle retourne true ou false et oui, j'avais oublié de placer mon return 1; ;)

J'ai aperçu sur un site le tableau $GLOBALS, ça vous dit quelque chose? parce que moi j'ai tout essayé rien n'y va :(

Menfin, merci beaucoup à vous deux, si personne ne trouve je m'orienterai vers les sessions.

Posté : 05 mars 2006, 00:44
par Cyrano
J'ai songé aux sessions Cyrano, le problème c'est que les variables sont disponibles sur toutes les pages du domaine et ce n'est pas ce que je désire même que ça me poserait problème...
Quel problème : sur certaines pages, rien ne t'interdit de détruire certaines variables dont l'usage n'est plus nécessaire, non ?

Posté : 05 mars 2006, 12:48
par zeus
@truc : un de mes prof avait pour habitude de dire qu'il ne fallait jamais qu'il y ai plus d'un return dans une fonction

pour quelqu'un qui codait
function nom {
  if (test) {
    code 1;
    return true;
  } else {
    code 2;
    return false;
  }
}
il te disait
function nom {
  $return_value = false;
  if (test) {
    code 1;
    $return_value = true;
  } else {
    code 2;
  }
  return $return_value;
}

@alexbad : dans ton code, tu n'appelles jamais la fonction, c'est donc normal que ta variable ne soit jamais modifiée ;)

Posté : 05 mars 2006, 13:17
par Ultiny
En plus d'près moi c'était juste après avoir créé la fonction qu'on rend global une variable. Enfin ça peut peut-être fonctionner différrement mais j'ai pour habitude ceci :
function my_func()
{
     global $var;
     // Instructions
}

Posté : 05 mars 2006, 15:08
par Lorenzo
tu peux utiliser le tableau des supers globales : $GLOBALS
c'est ce que je trouve le + propre.
mais si c'est une constante un define() fait aussi l'affaire

Posté : 05 mars 2006, 16:16
par jeff
salut
tu peut paser un troisieme argument qui est une variable passer par reference

Posté : 05 mars 2006, 19:21
par alexbad
@alexbad : dans ton code, tu n'appelles jamais la fonction, c'est donc normal que ta variable ne soit jamais modifiée
Ah il est dans la lune Alexbad, sans bon sens :lol: En effet, j'appellais la fonction ailleurs mais pas sur le fichier sur lequel je testais...

Alors finalement le problème est résolu avec l'utilisation du mot-clé
global ou encore comme l'a dit Lorenzo, le tableau $GLOBALS qui apporte strictement le même résultat.

Merci à tous, je mets [résolu] ;)