begin process at 2012 05 27 20:08:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > EXEMPLE D'UTILISATION DES VARIABLES STATIQUES : FONCTION & CONDITION ...

EXEMPLE D'UTILISATION DES VARIABLES STATIQUES : FONCTION & CONDITION ...


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :variable, statique, fonction, condition, exemple Niveau :Initié Date de création :06/07/2005 Date de mise à jour :07/07/2005 18:47:07 Vu :9 974

Auteur : LocalStone

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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 />';
  • }
  • /* ------------------------------ */
  • ?>
<?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.


 Historique

07 juillet 2005 18:47:07 :
Changement du titre ... Merci à Malalam d'avoir gardé son sang froid et de m'avoir convaincu ;)

 Sources du même auteur

Source avec Zip Source avec une capture MOTEUR D'ASPECT POUR PHP
Source avec Zip [PHPHOOK] UN PETIT SYSTÈME DE GESTION DES HOOKS DE SUBVERSIO...
Source avec Zip [PHP5] TASKSCHEDULER, UN PETIT PLANIFICATEUR DE TÂCHE EN PHP...
Source avec Zip [PHP5] NAVIGUER DANS UNE COLLECTION À L'AIDE D'UNE PSEUDO SY...
Source avec Zip Source avec une capture CLASSE D'ÉDITION DES FICHIERS DE CONFIGURATION D'APACHE

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

 Sources en rapport avec celle ci

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
CLEF POUR EAN 13 ET 14 par RaftY
Source avec Zip FONCTION PHP POUR REDIMENSIONNER UNE IMAGE ET UPLOADER DANS ... par GstJasmin
FONCTION QUI VÉRIFIE SI L'ARGUMENT EST UN NOMBRE PREMIER par darkelda
Source avec Zip Source avec une capture LOGGER LE TEMPS D'EXÉCUTION DE VOS FONCTIONS PHP par djroulo

Commentaires et avis

Commentaire de malalam le 07/07/2005 08:51:34 administrateur CS

Hello,

hmm...
Bon, outre le fait que ta fonction risque d'etre gourmande vu qu'on recompte le tableau a chaque iteration de ta boucle, tu seras peut-etre heureux qu'il existe deja une structure en php permettant de faire ca. Comme j'ai la flemme de reecrire un exemple banal qui existe deja sur php.net, je vais plutot le copier-coller :

<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

reset($fruit); // a noter que cette structure deplace le pointeur interne du tableau, seule difference avec ta fonction. Il faut donc utiliser reset () avant si on a deja deplace ce pointeur, et apres si on ne veut pas que le pointeur soit a la fin du tableau.
while (list($key, $val) = each($fruit)) {
   echo "$key => $val\n";
}
?>

http://de2.php.net/manual/en/function.each.php

Commentaire de malalam le 07/07/2005 11:33:44 administrateur CS

Et puis tant que j'y suis, une autre facon :

<?php
$tab = array (1,2,3,4,5,6);
while (false !== ($valeur = current ($tab))) {
echo $valeur, '<br />';
next ($tab);
}
?>

Commentaire de LocalStone le 07/07/2005 11:43:39

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.

Commentaire de malalam le 07/07/2005 11:55:49 administrateur CS

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.

Commentaire de LocalStone le 07/07/2005 13:53:10

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.

Commentaire de malalam le 07/07/2005 14:37:02 administrateur CS

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.

Commentaire de LocalStone le 07/07/2005 18:45:07

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Concaténer des variables [ par lyricman ] Bonjourje voudrais savoir s'il est possible de concaténer 2 variables?par leur texte mais les variablesexemple : je voudrais avoir une variable pour c pb de variable de retour [ par eax ] salutj'ai un petit pb avec une variable de retour d'une fonction:j'ai une fonction function test (){ $retour['date']=$date; $retour['heure']=$he plsieurs checkbox dans un variable [ par bricethenetman ] Slt a tous g plusieurs checkbox du genre &lt;input type="cbox" name"exemple1" value="1"&gt;&lt;input type="cbox" name"exemple2" value="2"&gt;&lt;input passage de variable dans l'url [ par Padkartiai ] Bonjour,Après visite de nombreux forums, je n'arrive toujours pas à passer de variable en paramètre dans une fonction include.Pour info : register_glo envoi d'une variable [ par ASPerix ] Bonjour,Voila mon probleme, g une fonction javascript, qui permet d'ouvrir une popup, celle ci est une page PHP.J'appel cette fonction dans un form et envoyer un formulaire vers une fonction [ par xzonz ] Salut à toutes et tousj'ai besoin de vos lumieres car la ! ...... ca coince ! et j'avance plusj'aimerais passer une variable (chemin ex : "C:/disc1.. Executer le contenu d'une variable [ par ilvec ] Bonjour à tous,tout d'abord, merci de lire (et peut-être de répondre) ma questionVoici mon problème : dans un fichier, j'ai tout plusieurs lignes cont Variable à nommer [ par PROTECTIONNISTE ] Salut (dsl pas trouver mieux pour le titre)voila j'explique en gros, j'ai une fonction dans laquelle je passe 2 argumentsfunction mafonction($argument sauvegarde d'une variable d'une fonction [ par lise8051 ] J'aimerais en php sauvegarder une variable définie dans une fonction pour la réutiliser en dehors. Est ce que je peux faire ca en définissant la varia Formatage de texte [ par juki_webmaster ] Bonjour à tous,Je developpe un petit projet baser en php/sql et j'aurais besoin d'un code (fonction toute faite) pour formater une variable (son conte


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales