PHP "return" comment mémoriser entre 2 a

Paul_Wi11iams -  
 Paul_Wi11iams -
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 3742 Statut Membre 1 011
 
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
 
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 3742 Statut Membre 1 011 > Paul_Wi11iams
 
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 457 Statut Membre 114
 
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 457 Statut Membre
 
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