PHP "return" comment mémoriser entre 2 a

Fermé
Paul_Wi11iams - 18 mars 2008 à 16:10
 Paul_Wi11iams - 28 mars 2008 à 10:26
Bonjour,
J'ai une fonction dont la valeur de return est un tableau "$sort". En voici un condensé.
Function cybebase()
{
/*la lecture de quelques lignes dans ma bdd dont une est chargée dans $sort.*/;
/* Je rajoute à $sort, une info, "cybebaseetat" qui servira pour informer la page qui appelle la fonction: */;
$sort[cybebaseetat] = 'sequ';
/* "cybebaseetat" servira aussi au prochain appel à la fonction pour lui dire où il en est dans son travail */;
return $sort;
};

et dans la page je fais: $lign = cybebase();

Pour que la fonction n'oublie pas le contenu de "sort", je suis obligé de le mettre en "global".
Mais à mesure que je crée des modules, il y a des interférences entre les noms. Donc toute occasion pour éliminer un nom en "global" est bienvenue.
J'ai bien vu des fonctions, comme dans MySql qui mémorisent des valeurs entre deux appels.

Ce serait quoi cette solution, autre que "global" ?
Merci d'avance
Paul Williams
A voir également:

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
18 mars 2008 à 16:40
Bonjour,

Il n'est pas possible qu'une fonction se "souvienne" d'une valeur d'une variable locale d'une fois sur l'autre.
Ce que tu peux faire, c'est à chaque fois passer la valeur précédente en paramètre de la fonction :

function cybebase($etatPrecedent = "")
{
...
}

Comme ça, si tu veux qu'elle se souvienne de l'état précédent, il suffit de le lui donner en l'appelant.

Xavier
0
Paul_Wi11iams
19 mars 2008 à 23:33
C'est ce que je ferai et cela a l'avantage de permettre à une même fonction d'avoir plusieurs travaux en cours en même temps. Un jour, j'irai regarder comment fait mysql_query pour stocker une série qui est récupérée progressivement par mysql_fetch_assoc. Selon ce que tu me dis, il doit forcement créer des global avec les risques que cela comporte. Finalement l'arguement supplémentaire est une bonne option.
Merci pour l'info ! Paul Williams.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Paul_Wi11iams
20 mars 2008 à 12:20
Non il n'utilise pas de global :)
Mais quand tu fais un mmysql_query, tu en stockes le résultat quelque part :
$resultat = mysql_query($requete);

Et quand tu fais appel à mysql_fetch_assoc() ou autre, tu lui passes en argument le résultat :
$donnees = mysql_fetch_assoc($resultat);

Ce n'est pas la fonction qui sait où elle en est, c'est l'objet $resultat qui inclut en lui-même un compteur pour savoir quelle est la prochaine ligne !
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
20 mars 2008 à 12:51
Le mot-clef static permet de définir des variables locales à une fonction qui gardent leur valeur d'un appel à l'autre

Voir par exemple http://www.manuelphp.com/php/language.variables.scope.static.php

Cette caractéristique peut être très utile mais doit être utilisée à bon escient et avec parcimonie
0
Paul_Wi11iams > croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012
28 mars 2008 à 10:26
Je dis merci tardivement. Je viens d'entendre que les calculs inutiles consomment des joules et contribuent à l'effet de serre. A l'entrée d'une fonction, on teste donc, s'il a déjà fait son travail (dans l'occurrence, le cryptage "#" de l'IP du visiteur). Dans le cas affirmatif, elle se contente de retourner la valeur précédemment calculée. Merci pour ta contribution à l'environnement !
Paul Williams
0