Exemple d'utilisation des variables statiques : fonction & condition ...

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 146 fois - Téléchargée 28 fois

Contenu du snippet

Alors voilà ... Je me demandais bêtement en regardant de la merde à la télé comment on pouvait coder une fonction qui fonctionne comme la célèbre fonction "mysql_fetch_array()" ; c'est à dire que l'on utilise en s'en servant comme condition dans une boucle. Et bien la réponse réside dans les variables dites "statiques" (ou "static" pour les anglophiles).
Du coup, pour essayer, j'ai coder une fonction toute inutile qui permet de faire défiler les éléments d'un tableau. Et - Ô Miracle - ça fonctionne. Et donc, je fais partager au réseau Codes-Sources !

Source / Exemple :


<?php
/* ------------------------------ */
   // Fonction qui va faire défiler les éléments d'un tableau.
   function FooBar($array)
   {
      // La variable statique qui va permettre de voir ou l'on se trouve dans le tableau. On lui donne la valeur "0" en supposant que le tableau commence à l'index 0.
      static $i = 0;
     // Si l'index appartient encore à l'ensemble des clefs du tableau ...
      if($i < count($array))
      {
         // Alors on retourne la valeur correspondant à la clef ...
         $value = $array[$i];
      }
      else
      {
         // Sinon, on retourne "false" qui aura pour effet de stopper la boucle.
         $value = false;
      }
      // On incrémente la variable statique.
      $i++;
      return $value;
   }
   // Exemple ;) ...
   $tablo = array(7, 4, 5, 8, 9, 1, 2, 3);
   while($value = FooBar($tablo))
   {
      echo $value.'<br />';
   }
/* ------------------------------ */
?>

Conclusion :


Voilà voilà ... Un code sans prétention, mais qui va me rendre service pour essayer de coder une pseudo-base de donnée XML-SQL. Secret ... Sinon, pour ceux qui n'ont pas trop compris, je vais pas me faire chier et citer Julp de php.developpez.com : "Une variable statique est uniquement utilisée dans le corps des fonctions. Elle n'est pas accessible à l'extérieur de la fonction où elle est déclarée. Static nous vient du C et signifie que la valeur de la variable conserve après les appels de la fonction sa valeur puisque l?emplacement mémoire alloué à cette variable est constant. Ce qui n?est pas le cas en temps normal avec les variables puisqu?elles sont détruites à la fin de l?exécution de la fonction (soit lorsque la fin du bloc de la fonction a été atteint, soit lorsque return est rencontré).".
Sur ce, ++ !
LocalStone.

A voir également

Ajouter un commentaire

Commentaires

LocalStone
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

Bon, c'est vrai que je me suis un peu embalé ... Mais c'est pas ma faute ! Matinée difficile.
Dans un sens, tu as raison, le titre est un peu faux et je vais (essayer de) le changer. Mais le truc, c'est que d'une part, on explique les variables statiques, mais y aussi l'exemple de la fonction qui sert de condition de fin de boucle. Et c'est au départ ça le plus important de la source. Donc je vais changer le titre ...
Merci de tes commentaires, parce que même si je me suis enervé, c'était constructif.
++ !
L.S.
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
T'enerves pas, lol. Je suis desole de ne pas etre en complet accord avec toi, mais bon...je n'y peux rien!
J'ai bien lu ton texte avant, le debut, et la fin. Mais j'avais pris ca comme : "au miracle, avec une variable statique je peux enfin parcourir un tableau et me servir de ce parcours comme condition...", et non pas comme : "voici un exemple de ce que sont les variables statiques, avec un petit code inutile juste pour montrer comment elles fonctionnent."
Ce que tu aurais du faire est plutot (et j'aurais compris de suite) mettre comme sujet : exemple simple d'utilisation des variables statiques. Par exemple.
Donc ok, tu expliques ce qu'est une variable statique.
LocalStone
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

L'interêt, c'est d'abord de montrer que de réaliser de telles fonctions est possible. D'une. Ok, j'ai mis un exemple bateau, n'empêche que je pense qu'il permet de bien comprendre la chose. Mais imagine que tu veuilles par exemple créer une jolie classe ergoomique et que tu veuilles créer une méthode qui interroge plusieurs base de données et qui tri les données à la volée ... Bah voilà, c'est possible.
De deux, l'interêt c'est d'expliquer une utilisation particulière des variables statiques. Je dis "une" parce qu'il y en a d'autre, comme par exemple ici : http://www.phpcs.com/codes/UTILISATION-INTELLIGENTE-DES-VARIABLES-GLOBALES-/26887.aspx (Y a marqué globale, mais en fait, ce sont les variables statiques qui sont encore plus adaptées pour cette exemple).
Voilà. Peut-être que j'ai fait 2 conneries - et ça je l'admet - ... J'aurais peut-être du préciser qu'il fallait LIRE et ne pas mettre cette source dans la catégorie "astuce".
++ !
L.S.
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
Ok mais si elle est inutile (j'avais bien lu), pourquoi la montrer ici ? Quel interet ? Puisqu'on peut se servir du parcours d'un tableau dans une condition, c'est meme tres frequent en programmation...on le fait quasiment tous a un moment ou a un autre?
Qui n'a pas fait
$cpt = count ($tab)
for ($i = 0; $i < $cpt; $i++)
...
ou
while ($i < $cpt)
..
$i ++

?

En fait ma question serait plutot : pourquoi une fonction pour ca, alors que tu fais la meme chose, sans fonction mais surtout avec aussi peu de lignes de codes que ton appel de fonction ? Si la fonction remplacait un code un peu plus long, ok...mais ce n'est pas le cas ? Tu as juste reecrit les structures de parcours de tableaux comme list...
Je ne comprends pas lol.
LocalStone
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

Salut à toi, Malalam ...
Je sais pas si tu as lu l'ensemble du texte, mais la fonction que j'ai proposé est totalement inutile et mal adaptée à son but. En plus des solutions que tu proposes, y a aussi "foreach" ...
Sauf que voilà, bah mon but n'est absolument pas de lister les éléments d'un tableau, mais de tenter d'expliquer comment créer une fonction qui puisse servir de condition dans une boucle. Mais je ne vais pas tout réécrire ou réexpliquer, puisqu'il suffit de lire en entier ce que j'ai écrit précédement.
Voilà !
L.S.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.