Définir des variables globales

ViPHP
ViPHP | 649 Messages

04 mars 2006, 18:17

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 :)
Image

Mammouth du PHP | 19672 Messages

04 mars 2006, 20:05

Et pourquoi tu ne créerais pas des variables de session ? Avec une session, tu pourrais les récupérer partout.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 20:21

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;
} 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 649 Messages

05 mars 2006, 00:05

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.
Image

Mammouth du PHP | 19672 Messages

05 mars 2006, 00:44

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 mars 2006, 12:48

@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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 656 Messages

05 mars 2006, 13:17

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
}

Lorenzo
Invité n'ayant pas de compte PHPfrance

05 mars 2006, 15:08

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

Mammouth du PHP | 1311 Messages

05 mars 2006, 16:16

salut
tu peut paser un troisieme argument qui est une variable passer par reference

ViPHP
ViPHP | 649 Messages

05 mars 2006, 19:21

@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] ;)
Image